求小于一个数n的所有数的阶乘

/*求给定一个数N,<=N的所有数的阶乘,输出!
由于计算量过大时,计算机不能再处理那些庞大的数据,所以要依靠数组来实现所有数字的乘法与加法
*/

View Code
#include<stdio.h>
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
printf("0! = 1\n");//对于所有给定的数,先输出0的阶乘
if(n > 0)//如果N > 0,则首先输出1的阶乘
printf("1! = 1\n");
int data,i;
//首先定义一个变量data,又来标记所有小于N的数
for(data = 2;data <= n; data++)
{
//首先定义一个数组用来存放数据
int a[1000] = {1};
//然后定义一些数据处理过程中用到的变量
int temp,top = 0,j,carry = 0,i,k = 0;
for(i = 2;i <= data; i++)
{
for(j = 0;j <= k; j++)
{
temp = a[j]*i+carry;//对于数组中的每一个元素,都必须做一次乘法然后加上上一次操作十进制所进的数carry;
a[j] = temp%10;//每一个单元只存放临时变量temp的个位数据
carry = temp/10;//计算临时变量temp的十进制数据
}
//下面的操作就是把carry中剩余的数据放到数组中
while(carry)
{
k++;
a[k] = carry%10;
carry /= 10;
}
}
printf("%d! = ",data);
for(i = k;i >= 0; i--)
{
printf("%d",a[i]);
}
printf("\n");
//输出数组中的数据进行循环操作
}
printf("\n");
}
return 0;
}
原文地址:https://www.cnblogs.com/SDUTYST/p/2423699.html