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

#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; }