我试图学习如何用C ++编程,因此我创建了一些东西,允许您输入最小和最大参数,它将计算k+(k+1)+(k+2)+...+(max)
,并使用标准公式(n(n+1)/2)
。当我尝试较小的数字时,它似乎工作正常,但是,例如,当尝试min=4
,max=4*10^5
(400,000)时,我得到的总和为负数,但通过分析得出的结果为正数方法,即使将类型从“ int”更改为“ long”也是如此。尝试其他组合时,我得到了相反的结果,分析方法得出的结果为负数。我怀疑这与类型int
可以上升到一定数字这一事实有关,但是我想对此进行一些确认,如果不是,则实际问题是什么。下面提供了代码:
#include <iostream>
// Values are inconsistent when paramin,parammax become large.
// For example, try (parammin,parammax)=(4,400,000)
int main() {
int parammax,parammin;
std::cout << "Input a minimum, then maximum parameter to sum up to" << std::endl;
std::cin >> parammin >> parammax;
int sum=0;
for (int iter = parammin; iter <= parammax; iter++){
sum += iter;
}
std::cout << "The sum is: " << sum << std::endl;
const int analyticalmethod = (parammax*(parammax+1)-parammin*(parammin-1))/2;
std::cout << "The analytical result for the sum is,"
" via (max*(max+1)-min*(min-1))/2: "
<< analyticalmethod << std::endl;
return 0;
}
答案 0 :(得分:1)
在C ++中使用非常大的数字而不加控制是危险的。基本类型int
,long
和long long
与实现有关,仅具有以下要求:
int
的大小至少为16位long
至少与int
一样大且至少32位大long long
至少与long
一样大且至少64位大如果您认为需要更大的值,则应考虑使用多精度库,例如出色的gmp。