long
int的最大数值,1到16就已经溢出了,何况你的还是有符号的,比无符号的少差不多一半.
这个用递归实现的.
#include<stdio.h>
void
main()
{
int
fac(int
x)
unsigned
long
int
y
int
x
printf("请输入一个整数:")
scanf("%d",&x)
y=fac(x)
printf("%ld\n",y)
}
int
fac(int
x)
{
unsigned
long
int
y
if(x==1)
{
y=1
}
else
y=fac(x-1)*x
return
y
}
将1到20的阶乘累加的C语言程序如下:
#include<stdio.h>
#include<string.h>
long long getdata(long long n){
long long sum = 1
while(n){
sum*=n--
}
return sum
}
int main(){
long long sum = 0
long long nums = 20
while(nums){
sum+=getdata(nums--)
}
printf("%lld",sum)
}
你的程序有点乱,也有的错的地方,比如一开始的int unit51()不应该是int main()吗?还有倒数第三行printf("1到20的阶乘和为:\n",sum)也是错的,应该改为printf("1到20的阶乘和为:%d\n",sum)但是貌似这样最后输出的也只有一个数而不是1到20的阶乘,最后一点,20的阶乘是一个非常大的数,用int根本不行。程序就不给你改了,需要的话我给你写一个。