/*
高精度乘法:
1 用数组模拟,数组上的每一位代表一个数字,简化结构体操作
2 用f[0]表示个位,f[1]表示十位,因为需要进位。输入的时候忽略前导0
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 1024
void process(int iNum)
{
int iDigit[MAXSIZE];
memset(iDigit,0,sizeof(iDigit));
iDigit[0] = 1;
for(int i = 2 ; i <= iNum ; i++)//阶乘
{
int iPass = 0;
for(int j = 0 ; j < MAXSIZE ; j++)//位数
{
int iTemp = iDigit[j] * i + iPass;
iPass = iTemp / 10;
iDigit[j] = iTemp % 10;
}
}
int k;
for(k = MAXSIZE -1 ; k >= 0; k--)
{
if(iDigit[k])
{
break;//忽略前导0
}
}
while(k >= 0)
{
printf("%d",iDigit[k--]);
}
}
int main(int argc,char* argv[])
{
int iNum;
scanf("%d",&iNum);
process(iNum);
system("pause");
return 0;
}
算法竞赛入门经典:第五章 基础题目选解 5.6 数组模拟高精度乘法
最新推荐文章于 2020-07-08 22:18:24 发布