由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 请问在程序中怎么测试是否整数溢出
相关主题
请教昨天那个 binary加法, a + b,怎么算?atoi的溢出处理的想法
MS电面leetcode上的2个整数相除
离奇的Amzaon第一轮电面150上的11.3,用1GByte的memory找出4B整数中的missing one
面试问题,最长翻转整数问题FLG面试题,压缩整数 (转载)
一道G家的店面题问两道bloomberg的题目
问个BITWISE的题目。请教如何解决整数的溢出问题
微软SDE onsite面经及咨询问个问题:十进制数字反转
如何判断char的赋值有没有溢出不用大整数如何计算组合数?
相关话题的讨论汇总
话题: ret话题: tmp话题: 溢出话题: int话题: factorial
进入JobHunting版参与讨论
1 (共1页)
K******g
发帖数: 1870
1
如果我要写个factorial的程序,即使用long long unsigned,也仍有可能溢出,请问
我怎么在程序运行中测试它,如果溢出了再做相应的处理?
p******r
发帖数: 2999
2
int factorial(int n) {
int ret, tmp, i;
if (n < 0) return -1;
ret = tmp = 1;
i = 2;
while (i <= n) {
tmp *= n;
if (tmp < ret) return -1;
ret = tmp;
++ i;
}
return ret;
}

【在 K******g 的大作中提到】
: 如果我要写个factorial的程序,即使用long long unsigned,也仍有可能溢出,请问
: 我怎么在程序运行中测试它,如果溢出了再做相应的处理?

K******g
发帖数: 1870
3
这个不一定吧,溢出后的数一定比这次的数小?假如最大整数是10,这次为6,溢出后
,完全有可能在6-10之间啊。

【在 p******r 的大作中提到】
: int factorial(int n) {
: int ret, tmp, i;
: if (n < 0) return -1;
: ret = tmp = 1;
: i = 2;
: while (i <= n) {
: tmp *= n;
: if (tmp < ret) return -1;
: ret = tmp;
: ++ i;

Z*****Z
发帖数: 723
4
geniusxsy说过这样一种方法:对于可能产生溢出的运算,拿结果进行逆运算进行验证。
具体在这里c = a * b,你不知道c是不是溢出了,就用c/a看看得不得b。

【在 K******g 的大作中提到】
: 这个不一定吧,溢出后的数一定比这次的数小?假如最大整数是10,这次为6,溢出后
: ,完全有可能在6-10之间啊。

p******r
发帖数: 2999
5
嗯,这个方法不错
判断大小只对int类型的加法有点效果

证。

【在 Z*****Z 的大作中提到】
: geniusxsy说过这样一种方法:对于可能产生溢出的运算,拿结果进行逆运算进行验证。
: 具体在这里c = a * b,你不知道c是不是溢出了,就用c/a看看得不得b。

w****r
发帖数: 1384
6
整数溢出后成负数了...

【在 K******g 的大作中提到】
: 这个不一定吧,溢出后的数一定比这次的数小?假如最大整数是10,这次为6,溢出后
: ,完全有可能在6-10之间啊。

1 (共1页)
进入JobHunting版参与讨论
相关主题
不用大整数如何计算组合数?一道G家的店面题
面试写代码的问题问个BITWISE的题目。
求助:求整数的位数,咋就不对了呢?微软SDE onsite面经及咨询
实现BigInt的存储和加法如何判断char的赋值有没有溢出
请教昨天那个 binary加法, a + b,怎么算?atoi的溢出处理的想法
MS电面leetcode上的2个整数相除
离奇的Amzaon第一轮电面150上的11.3,用1GByte的memory找出4B整数中的missing one
面试问题,最长翻转整数问题FLG面试题,压缩整数 (转载)
相关话题的讨论汇总
话题: ret话题: tmp话题: 溢出话题: int话题: factorial