标签:
http://acm.hdu.edu.cn/showproblem.php?pid=1042
题意清晰..简单明了开门见山的大数乘法..
10000的阶乘有35000多位 数组有36000够了
# include <stdio.h> # include <string.h> # define MAX 36000 int BigNum[MAX], NowLen; void Multi(int number) { int Temp[MAX]={0}, Tlen = 0, t;//Temp保存乘后结果 while(number > 0) { t = number % 10;//依次取当前乘数的低位 number /= 10; for(int i = 0, j = Tlen; i <= NowLen; i++)//模拟乘法 先不管进位 { Temp[j++] += BigNum[i] * t; } Tlen++;//每乘完一位 Temp的开始读入位置+1 } for(int i = 0; i < MAX; i++)//处理进位 接收结果 { if(Temp[i] > 9) { Temp[i + 1] += Temp[i] / 10; BigNum[i] = Temp[i] % 10; } else BigNum[i] = Temp[i]; } for(int i = MAX - 1; i >= 0; i--)//获取长度 { if(BigNum[i] > 0) { NowLen = i; break; } } } int main() { int n; while(scanf("%d",&n) != EOF) { memset(BigNum, 0, sizeof(BigNum)); BigNum[0] = 1, NowLen = 0;//初值 初始长度 for(int i = 2; i <= n; i++)//模拟乘法 Multi(i); for(int i = NowLen; i >= 0; i--)//格式输出 printf("%d",BigNum[i]); printf("\n"); } return 0; }
标签:
原文地址:http://www.cnblogs.com/linjiaman/p/4297226.html