链接:https://ac.nowcoder.com/acm/problem/15064
来源:牛客网
给定一个整数N(0≤N≤10000),求取N的阶乘
输入描述:
多个测试数据,每个测试数据输入一个数N
输出描述:
每组用一行输出N的阶乘
示例1
输入
1 2 3
输出
1 2 6
#include <stdio.h>
#define N 10010
int main()
{
int a[N]={1}; // 一个数组A来表示一个大整数a,将a设为1
int carry=0,len=1,n; //carry表示进位的数字,len表示数组元素个数(位数),n表示要计算的阶乘
int i,j;
scanf("%d",&n);
for(i=1;i<=n;i++) //阶乘
{
for(j=0;j<len;j++) //数组A的每一个元素都乘以一个整数
{
a[j]=a[j]*i+carry; //乘法计算,乘以i,类似算术里的竖式计算(加上上一位进位的数字)
a[j]=a[j]%10000; //保留余数
carry=a[j]/10000; //每位存 10000 以内的数,否则进位
}
if(carry!=0) //最后一位进位的处理
{
a[j]=carry; //把进位的数字存放在下一个数组元素中 (进位)
len++; //数组长度加1 (增加一位)
carry=0; //重置carry (进位完成)
}
}
printf("%d",a[len-1]); //先输出最大位的数字(最大位可能不够4个数字)
for(i=len-2;i>=0;i--) //再输出之后位的数字 (一定每位有4个数字)
printf("%04d",a[i]);//输出4位数字,空位用0补充。比如320输出为0320
printf("\n");
return 0;
}