c - 累计溢出
问题描述
假设我要加 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'
但我不得不承认这让我感到困惑,而且我仍然发现在我的任务中实施它有些困难。
任何帮助将不胜感激。
解决方案
只需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)
只是为了使示例简短。您可以添加任何您喜欢的错误处理。
推荐阅读
- ios - 从 AlamoFire 导入 JSON 数据后创建数组
- android - 将 .keystore 文件转换为 .jks 文件以签署 IONIC V3 App
- hadoop - GET 操作时 WebHdfs 无法解析主机名
- java - Java - 从 2 个日期按月创建日期组
- java - 如何在java中显式地实现引用传递?
- c# - C# Console 应用程序控制台输入和监听处理程序
- javascript - 有什么方法可以通过 d3.js 可折叠树布局中的一条线连接叶节点?
- php - 冰川php加急下载
- c# - c#带有Type(不是String)的外键注释
- android - 在android studio中获取json格式问题的数组并放入数组中