最近一面学习数据结构,一面在做些c语言的题目。这个题目前些天碰到,和同学讨论了下。于是就用c语言实现n!(n=10000)
1 #include<stdio.h> 2 #define MAX 50000 3 4 int main(void) 5 { 6 int a[MAX] = {0}; //置数组每一位为0 7 a[MAX-1] = 1; 8 9 int k, i; //k遍历阶乘,i作为数组下标 10 int go = 0; //go作为进位 11 12 for (k=2; k<=10000; k++) //每乘一个数,遍历整个数组 13 for (i=MAX-1; i>=0; i--) //从数组最后一位放起 14 { 15 int temp; 16 temp = a[i] * k + go; //乘法原理 17 a[i] = temp % 10; 18 go = temp / 10; 19 } 20 i = 0; 21 while (!a[i++]) //过滤掉数组前面的0 22 ; 23 k = i; 24 for (i--; i<MAX; i++) //注意i--操作,前面多过滤一位 25 { 26 if (i % 20 == 0) //每二十位换一行 27 printf(" "); 28 printf("%d", a[i]); 29 } 30 printf("10000!共有%d位。 ", MAX - k + 1); 31 return 0; 32 }