我对以下简单代码有疑问,我不知道为什么输出会变成负数...程序应该计算所有奇数和五位数的总和,如10001,10003,10005等
#include <iostream>
using namespace std;
int main()
{
int num, sum = 0;
for (num = 10001 ; num <= 99999 ; num+=2){
sum += num;
}
cout << num << " " << sum;
return 0;
}
答案 0 :(得分:2)
您的int
可能会溢出。将其切换为long
int num = 0;
long long sum = 0L;
假设您有一个4字节int
,则最大值为2^31 - 1 == 2147483647
。 See this example
你的金额将会出现2475000000
,这将溢出。
答案 1 :(得分:2)
这意味着int类型溢出。那就是这种类型不能代表总和。我建议声明变量sum,如
long long int sum = 0;
之后,您可以将结果与存储在int类型中的最大值进行比较。例如
#include <limits>
//...
std::cout << std::numeric_limits<int>::max() << " " << sum << std::endl;;