输出90!到屏幕上,并计算出它总共包含多少个10进制位。
#include <limits.h> #include <stdio.h> #include <stdlib.h> #define N 90 // 求N! #define GS 23 // 需要23个int #define WS 7 // 每个int存放7位十进制数 #define ZX 10000000 //最小的8位数 void cheng ( int [] , unsigned , int ); void jinwei ( int [] , unsigned ) ; void shuchu ( int [] , unsigned ) ; int main( void ) { int dashu[GS]; int i; cheng ( dashu , GS , 0); //清0 dashu[0] = 1 ; for ( i = 1 ; i <= N ; i++ ) { cheng ( dashu , GS , i); } shuchu ( dashu , GS ); getchar(); return 0; } //用n乘以shu中各项 void cheng ( int shu[] , unsigned gs , int n) { int i; for ( i = 0 ; i < gs ; i ++) shu[i] *= n ; jinwei ( shu , gs ) ; //进位 } //进位 void jinwei ( int shu[] , unsigned gs ) { int i; for ( i = 0 ; i < gs -1 ; i++) { shu[i+1] += shu[i]/ZX ; shu[i] %= ZX ; } } void shuchu(int shu[], unsigned gs) { int i = gs-1; //从高位开始输出 int temp,k=0; while(shu[i]==0) //跳过前面的0 i--; temp=shu[i]; while(temp!=0){ temp=temp/10; k++; } temp=k+i*7; printf("%d\n",temp); printf("%d",shu[i--]); while(i>=0) printf("%07d",shu[i--]); //需要输出7位且0是必要的 putchar('\n'); }输出:
139
1485715964481761497309522733620825737885569961284688766942216863704985393094065876545992131370884059645617234469978112000000000000000000000