1到20的阶乘 C语言

Python013

1到20的阶乘 C语言,第1张

递归就行了,问题是阶乘1到20已经溢出了unsigned

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

}

使用 unsigned long long 类型绝对的够了,下图是最后的运算结果:

unsigned long long 类型是C语言里面目前精度最高的数据类型,

double或者long double 虽然也占有8个字节,但是他们的实际精度只有53位,

而 unsigned long long 却有64位的精度,

具体的话,可以看我的帖子:

① C语言视频 VS2015:[7]基本数据类型:

http://jingyan.baidu.com/article/ceb9fb10c1abac8cad2ba0ca.html

② C语言视频 VS2015:[10]printf:

http://jingyan.baidu.com/article/8ebacdf021253d49f65cd539.html

希望对你有用,我是ndk吧吧主,有问题可以ndk吧留言,谢谢!

你求的不是20阶乘,20阶乘应该这么写

long m = 1

for (int i = 1i <= 20++i)

{

m = m * i

}