gpt4 book ai didi

C++系列求和代码在大输入上给出不同的答案

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:01 25 4
gpt4 key购买 nike

我在 C++ 中将 1 到 n 的数字相加。 iteration method 我都用过和 mathematical formula .该代码最多适用于 9 位数字。

Same result for both methods

但是当我输入一个 10 位数字时,公式和迭代方法会给出不同的答案。

First answer derived from formula and second one from iteration method

我试图在谷歌上查找但找不到任何解决方案。我的代码:

#include <bits/stdc++.h>
using namespace std;

int main(){

unsigned long long i, n, sum = 0, out_put;
cout << "Sum of numbers from 1 to: ";
cin >> n;

/// using mathematical formula
out_put = n*(n+1);
out_put = out_put/2;
cout << " = " << out_put << endl;

/// using iteration
for (i=1; i<=n; i++){
sum = sum+i;
}
cout << " == " << sum << endl;

return 0;
}

如何知道哪一个是正确的?如果我假设公式不会错,那么为什么迭代方法给出了错误的答案?我用过unsigned long long以防止溢出但仍然没有用。

最佳答案

您所看到的是您的计算在不同点发生了溢出。 9,999,999,999 * 10,000,000,000 是 ~9.9e19unsigned long long 持有 ~1.8e19。所以结果循环,你得到一个答案。

你的 for 循环也会溢出,但它会在不同的点溢出,这意味着答案会彼此不同,因为模运算发生在一个较小的数字上。

关于C++系列求和代码在大输入上给出不同的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52894354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com