我一直在尝试用C ++实现一些东西,但显然有一个语法错误。
#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;
}
#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的幂来获得足够的“尾随零”,然后再次添加输入。
我哪里错了?另外,为什么上述两个代码之间存在差异? (请解释为什么第一个代码将其作为输出,第二个代码作为输出,并帮助我使用更新的代码来获得所需的输出)。
没有语法错误,否则您的代码无法以可执行文件的形式运行。
对“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