输入一个数并计算它的阶乘。
输入样例:
100
输出样例:
100的阶乘为:93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
One Possible Answer:
#include<>
# define N 1000
int legion(int v[],int x,int n)
{
int i,cp,s=N-2,j,k;
v[N-1]=1;
for(i=1;i<n+1;++i){
cp=0;
/*
以下这个循环是关键步骤
用到了数学的进位思想,
其中的s为岗哨,cp为向后要进的位数,且cp可能不仅仅是个位数。
因为要进位,所以要从所定义的数组的最后一个单元开始计算,
所以上方先定义v【N-1】为1
*/
for(j=N-1;j>s;--j){
k=v[j]*x+cp;
v[j]=k%10;
cp=k/10;
}
/*
cp如果不一位一位向数组后面的单元里存储的话,
就可能会因为在循环中cp的值过大而导致出现负数,
致使程序出错,所以以下采用while循环来往后一位一位存储它。
*/
while(cp){
v[s--]=cp%10;
cp=cp/10;
}
--x;
}
return s;
}
int main(void)
{
int v[N],x,n,s,i;
printf("请输入需要计算阶乘的数:");
scanf("%d",&x);
n=x;
s=legion(v,x,n);
printf("%d的阶乘为:",n);
for(i=s+1;i<N;++i){
printf("%d",v[i]);
}
printf("\n");
return 0;
}