|
可以利用一维数组来存储一个很大的数据,这个数据的范围或许超过 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; | | } | |
|
|