【发布时间】:2020-09-25 14:08:34
【问题描述】:
在做我的第一个 uni 作业,并遇到了这个问题:
任务:求所有 n 个元素的总和,其中 n 是数字中数字的个数(n=1,表示 1、2、3...例如 8、9,答案为 45)
问题:我写的代码已经正确地得到了所有测试答案,直到 10 的 9 次方,但是当它达到 10 的 10 次方时,答案开始出错,这真的很接近我应该得到,但不完全在那里(例如,我的输出 = 49499999995499995136,预期结果 = 49499999995500000000)
非常感谢一些帮助/见解,我猜这与变量类型有关,但不太确定可能的解决方案..
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
int n;
double ats = 0, maxi, mini;
cin >> n;
maxi = pow(10, n) - 1;
mini = pow(10, n-1) - 1;
ats = (maxi * (maxi + 1)) / 2 - (mini * (mini + 1)) / 2;
cout << setprecision(0) << fixed << ats;
}
【问题讨论】:
-
pow不能与int参数一起使用.. 寻找重复项 -
如果 int n 10 就不能正常工作?如果我可以问的话,我应该用什么代替 int 呢?
-
@idclev463035818 这个问题实际上是由于 10^10 * 10^9 超过了
double的位。与pow关系不大(我认为) -
49,499,999,995,500,000,000 是一个天文数字 (10^20)。没有简单的方法来处理它而不损失标准 C++ 中的精度。请参阅here 以获得一些灵感。