C++ C++;在不同计算机上给出不同结果的程序
我的代码正在为输入100打印192(这是期望的结果)。但当我在网上提交它时,它显示我的程序输入100的输出是190。我在ideone.com上复制并粘贴了代码,输入100得到结果192。我把它发送给我的朋友,在他的电脑上输出是190。但他也将代码提交到了ideone.com上,获得了192分。有什么问题吗?这是我的密码:C++ C++;在不同计算机上给出不同结果的程序,c++,C++,我的代码正在为输入100打印192(这是期望的结果)。但当我在网上提交它时,它显示我的程序输入100的输出是190。我在ideone.com上复制并粘贴了代码,输入100得到结果192。我把它发送给我的朋友,在他的电脑上输出是190。但他也将代码提交到了ideone.com上,获得了192分。有什么问题吗?这是我的密码: #include <bits/stdc++.h> using namespace std; typedef long long int lli; int mai
#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;
}
}
#包括
使用名称空间std;
typedef long long int lli;
int main(){
lli-in,ans=0;
cin>>中;
if(in<10)
cout(0){
//cout问题在于,std::pow
不精确。它是一种近似算法。它返回的浮点结果可能会有一些非常小的偏差
当您将浮点数转换为整数时,您可以通过删除小数部分对其进行四舍五入。但是,如果正确的结果应该是100
,并且错误是-0.000…001
,因此结果是99.999…999
,并且您删除了小数部分,那么您得到的整数是99。
如何实现std::pow
,具体取决于实现者。因此,错误可能在一个编译器/计算机中存在,但在另一个编译器/计算机中存在。这就是结果可能不同的原因
解决方案:不要使用std::pow
进行整数计算
解决方法:首先将结果四舍五入到最接近的整数。阅读CodeChef关于如何处理输入和输出的指南!:)旁注,为什么不包括?@RedwanulSourav单击Cory评论中的链接。我去掉了bits/stdc++.h。但输出没有任何改进。@RedwanulSourav无需感谢,这就是upvote按钮的作用。不要放弃et将最有用的答案标记为已接受:)