|
|
可以利用一维数组来存储一个很大的数据,这个数据的范围或许超过 int 形的许多。利用一维数组,可创造出更大的数字存储空间。下面的算法计算一个数的阶乘:
| #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; | | | | } | |
|
|