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

前端之家收集整理的这篇文章主要介绍了C系列求和代码给出大输入的不同答案前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在C中添加从1到n的数字.我已经使用了 iteration methodmathematical formula.该代码适用于最多9位数.

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

我试图在谷歌上查找但无法找到任何解决方案.我的代码

#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 * 10,000,000是~9.9e19,而无符号长多头持有~1.8e19.所以结果结束了,你得到一个答案.

你的for循环也会溢出,但它会在不同的点上这样做,这意味着答案将彼此分开,因为模数运算的数字较小.

原文链接:https://www.f2er.com/c/116583.html

猜你在找的C&C++相关文章