我一直在尝试用C ++实现一些东西,但显然存在语法错误。
当输入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;
}
以下代码为同一输入产生“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) 所以我想将输入乘以10的合适功率以获得足够的“尾随零”,然后再次添加输入。
我哪里错了?另外,为什么上述两个代码之间存在差异? (请解释为什么第一个代码将其作为输出,第二个代码作为输出,并帮助我使用更新的代码来获得所需的输出。)
答案 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