连续两次写入数字时出现逻辑错误 (C++)

Logic error in writing the number twice in a row (C++)

本文关键字:错误 C++ 两次 连续 数字      更新时间:2023-10-16

我一直在尝试用C++实现一些东西,但显然,有一个语法错误。

  1. 当输入 31 作为输入时,以下代码产生"1 3100":

    #include<iostream>
    #include<cmath>
    using namespace std;
    int main()
    {
        long long n; cin>>n;
        long long j = floor((log10(n)));
        long long nn = (n*((long long)pow(10,j+1)))+n;
        cout<<j<<" "<<nn;
    }
    
  2. 以下代码为相同的输入生成"1 3130",即 31 :

    #include<iostream>
    #include<cmath>
    using namespace std;
    int main()
    {
        long long n; cin>>n;
        long long j = floor((log10(n)));
        long long nn = (n*(pow(10,j+1)))+n;
        cout<<j<<" "<<nn;
    }
    
我希望为输入 31

生成"1 3131"。基本上,我尝试连续两次写入数字:当您将数字解析为字符串并两次添加相同的字符串时,您会得到相同的内容(例如,n = 11,解析为s = "11",然后产生s + s(。
所以我想将输入乘以合适的十次方以获得足够的"尾随零",然后再次添加输入。

我哪里出错了?另外,为什么上面的两个代码之间有区别?(请解释为什么第一个代码将其作为输出,第二个代码将其作为输出,并帮助我使用较新的代码来获得所需的输出(。

没有语法错误,否则您的代码最终不会以可执行的方式运行。

"3130"意外输出的解释是在整数上下文中误用浮点函数。

long long n; cin>>n; // n becomes 31
long long j = floor((log10(n))); // j becomes 1
long long nn = (n*(pow(10,j+1)))+n; // the result from pow is a floating point just below 100
// integer-multiplied by 31 gives 3099
// adding 31 results in 3130
cout<<j<<" "<<nn; // output 3130