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

时间:2018-03-02 16:09:53

标签: c++ syntax-error

我一直在尝试用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;
    }
    
  3. 我希望为输入31生成“1 3131”。基本上,我试图连续两次写入数字:将数字解析为字符串并添加相同的字符串时获得的相同内容(比如,n = 11,解析为s =“11”然后产生s + s) 所以我想将输入乘以10的合适功率以获得足够的“尾随零”,然后再次添加输入。

    我哪里错了?另外,为什么上述两个代码之间存在差异? (请解释为什么第一个代码将其作为输出,第二个代码作为输出,并帮助我使用更新的代码来获得所需的输出。)

1 个答案:

答案 0 :(得分:3)

没有语法错误,否则您的代码最终无法运行。

“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