我在C中添加从1到n的数字.我已经使用了
iteration method和
mathematical 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循环也会溢出,但它会在不同的点上这样做,这意味着答案将彼此分开,因为模数运算的数字较小.