Description
求1!+2!+…+k!=?,并判断是否溢出。
Input
输入为一个正整数k。
Output
若1!+2!+…+k!的值溢出unsigned(无符号整型)的范围输出“overflow”,否则输出1!+2!+…+k!的结果。
Sample Input
5
Sample Output
153
HINT
如果一个值溢出某个变量的数据类型存储范围,但仍然存入该变量,那么存入该变量中的值实际上是什么?
#include <stdio.h>
int factor(int i)
{
int n;
if(i==0||i==1)
n=1;
else
n=i*factor(i-1);//函数的递归调用
return n;
}
int main()
{
int k,i;
unsigned int sum=0,sum1;
scanf("%d",&k);
if(k<=12)//k>=13将溢出 其余解决方案:factor(k)/factor(k-1)==k;sum-sum1==factor(k)
{for(i=1;i<=k;i++)
{
sum1=sum;
sum+=factor(i);
}
printf("%d\n",sum);
}
else
printf("overflow\n");
return 0;
}
更正:如何测试是否溢出
#include <stdio.h>
int jiecheng(int n)
{
if(n==1)
return n;
else
{
return n*jiecheng(n-1);
}
}
int ceshi(int n)
{
if(jiecheng(n)/jiecheng(n-1)==n)//注意!!!!!!
return 1;
else
return 0;
}
int main()
{
int n,i,sum=0;
scanf("%d",&n);
if(ceshi(n)==1)
{
for(i=1;i<=n;i++)
{
sum+=jiecheng(i);
}
printf("%d\n",sum);
}
else
printf("overflow\n");
}