C++ C++;在不同计算机上给出不同结果的程序

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

我的代码正在为输入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 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将最有用的答案标记为已接受:)