我的代码对于输入的100打印出了192(这是期望的结果)。但当我将其提交到在线评测机上时,它显示我的程序对于输入的100的输出为190。我将代码复制粘贴到ideone.com上,对于输入的100,我得到了结果192。我将其发送给我的朋友,在他的PC上输出为190。但是他也将代码提交到ideone.com上,得到了192。问题在哪里?以下是我的代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
int main(){
lli in,ans = 0;
cin >> in;
if(in < 10)
cout << in << endl;
else{
lli digits = 0;
lli temp = in;
while(temp > 0){
digits++;
temp /= 10;
}
digits--;
while(in > 0){
//cout << "in: " << in << endl;
//cout << "digits: " << digits << endl;
ans += ((in - (pow(10,digits) - 1)) * (digits + 1));
in = in - (in - (pow(10,digits) - 1));
digits--;
if(in == 9){
ans+= 9;
break;
}
}
cout << ans << endl;
}
}
ideone链接:http://ideone.com/zOvHzW
为什么会发生这种情况?我知道可能是编译器问题,但实际上到底发生了什么?
#include <bits/stdc++.h>
。 - Cory Kramerin
为100
时),一些编译器将in = in - (in - (pow(10,digits) - 1));
计算为98
,而另一些则计算为99
(这是正确的)。我不确定原因是什么,我认为这可能与优化有关,但我不确定。 - PcAF