【发布时间】:2018-08-06 18:15:33
【问题描述】:
假设我要加 1+11+111....加 n 次。 很明显,从n的某个值来看,可能存在累积和的溢出。
假设我使用以下非常简单的函数来计算上面的总和:
int calcSum(int num)
{
int sum = 0, sequnt = 1, i;
for (i = 0; i < num; i++)
{
sum += sequnt;
sequnt = (sequnt * 10) + 1;
}
return sum;
}
我想为该函数添加溢出检查。
我试图在这里获得一些帮助How to check if a number overflows an 'int'
但我不得不承认它让我感到困惑,而且我仍然发现在我的任务中实现它有些困难。
任何帮助都将不胜感激。
【问题讨论】:
-
if(INT_MAX - sequnt >= sum)这样做是安全的sum += sequnt; -
INT_MAX应该是你的朋友 -
@WeatherVane 并非所有事件都如此。假设对于 16 位系统,调用 calcSum(111111) 将在函数调用时溢出到 -19961。 num 的值为 -19961,并且由于整数提升 INT_MAX - -19961 将始终大于 sum。
-
@Kenneth 111111 不是 16 位值。
-
@WeatherVane 是一个完全有效的 16 位长整数类型。