首页 > 解决方案 > 累计溢出

问题描述

假设我要加 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;
}

对于该功能,我想添加一个溢出检查。

我试图在这里获得一些帮助如何检查数字是否溢出'int'

但我不得不承认这让我感到困惑,而且我仍然发现在我的任务中实施它有些困难。

任何帮助将不胜感激。

标签: coverflow

解决方案


只需INT_MAX使用limits.h

int calcSum(int num)
{
    int sum = 0, sequnt = 1, i;

    for (i = 0; i < num; i++)
    {
        if (INT_MAX - sequnt < sum) exit(1); // overflow
        sum += sequnt;
        if (INT_MAX/10 <= sequnt) exit(1); // overflow on the two next sentences.
        sequnt *= 10;
        sequnt++;
    }

    return sum;
}

exit(1)只是为了使示例简短。您可以添加任何您喜欢的错误处理。


推荐阅读