| #include <stdio.h> |
|
| int main(void) |
| { |
| int data[40]; |
| int digit; |
| int i,j,r,k; |
| int N; |
|
| for( i=1; i<40; i++) |
| data = 0; |
|
| data[0] = 1; /* 0!=1 */ |
| digit = 1; /* 初始为 1 位 */ |
|
| printf("Enter a number what you want to calculus: "); |
| scanf("%d", &N); |
|
| for(i=0; i<N; i++) /* i 为级数,如求 7!, 则 i 为1,2,3..7*/ |
| { |
| for(j=0; j<digit; j++) |
| data[j] *= (i+1); /* 每级相乘处理,如 7x6! ,这里 i=7,整个数组代表的值为 6!*/ |
|
| for(j=0; j<digit; j++) |
| { |
| if( data[j] >= 10 ) |
| { |
| for(r=0; r<digit; r++) |
| { |
| if( data[digit-1] >= 10 ) |
| digit++; /* 累计位数 */ |
|
| data[r+1] += data[r]/10; /* 取出商并递送到下一元素 */ |
|
| data[r] = data[r] % 10; /* 留下余数 */ |
| } |
| } |
| } |
| |
| } |
| printf("%d! = ",i); |
|
| for(k=digit; k>0; k--) |
| printf("%d",data[k-1]); |
|
printf("
"); |
|
| return 0; |
| |
| } |
|