在C语言中怎样判断一个程序运算结果是否溢出,举个例子,你用C语言编写程序求n!,判断n为几时n!溢出

如题所述

#include <stdio.h>

unsigned f(unsigned *n) {

unsigned i = 2,res = 1,lres = 1;

while(1) {

lres *= i;

if(lres < res) {

*n = i - 1;

return res; // 溢出后,阶乘的结果会变小。

}

res = lres;

i++;

}

return i; // 本行是不会执行的,这是为了函数需要返回值而设的。

}

int main() {

unsigned n;

printf("%u! = %u\n\n",n,f(&n));

return 0;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-08
int prev,now,n;
每次计算前先将上次结果保存到prev;然后计算的结果保存到now;
判断prev!=now/n;则表示溢出本回答被提问者采纳
第2个回答  2011-10-08
C语言对整数是不检测溢出的
第3个回答  2011-10-08
unsigned int result,last_result=0;
result=fn(n);
if(result<last_result)
{
/*overflow occurred,last_result and n-1 is the max available value*/
}
last_result=result;
第4个回答  2011-10-08
int nn(int n)
{
int tmp1,tmp2;
if(n==0)return 1;

tmp1=nn(n-1);
tmp2=n*tmp1;
if(tmp1>tmp2)printf("overflow %d",n);
return tmp2;
}
main()
{
nn(10);
}追问

给我一个用for语句的循环写一个程序,直接将N阶乘溢出时N值输出来

追答

int nn(int n)
{
if(n==0)return 1;
return n*nn(n-1);
}
main()
{
int i,tmp,tmp1;
tmp=1;
for(i=0;;i++)
{
tmp1=nn(i);
if(tmp1<tmp)
{
printf("over =%d\n",i);
break;
}
tmp=tmp1;
}
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网