#include "stdafx.h"
#define BIT 10000
/************************************************************************
函数功能: 大数计算
参数1: char szByNum[] //被乘数 [0]位为字符长度
参数3: char szNum[] //乘数 [0]位为字符长度
参数5: char aryResult[] //积 用来放结果 [0]位为结果长度
备注: 函数中的BIT为进位数,在宏定义
************************************************************************/
void BigNumImul(char szByNum[], char szNum[], int aryResult[])
{
int nByNumLen, nNumLen, nTempLen, nResultLen = 1;
int i;
//乘数长度从右向左依次
for (nNumLen = szNum[0]; nNumLen > 0; nNumLen--)
{
nTempLen = nResultLen;
for (nByNumLen = szByNum[0]; nByNumLen > 0; nByNumLen--, nTempLen++)
{
//结果第一次从第一位开始,第二次从第二位开始放
aryResult[nTempLen] = aryResult[nTempLen] + (szNum[nNumLen] - 0x30) * (szByNum[nByNumLen] -0x30);
}
//下一次得从第二位开始
nResultLen++;
//进位处理
for (i = 1; i <= aryResult[0]; i++)
{
if (aryResult[i] > BIT)
{
aryResult[i+1] = aryResult[i+1] + aryResult[i] / BIT;
aryResult[i] = aryResult[i] % BIT;
}
}
if (aryResult[i] > 0)
{
aryResult[0]++;
}
}
}
int main()
{
char szByNum[100], szNum[100];
int aryResult[200] = {0};
int i;
printf("请输入被乘数: ");
gets(&szByNum[1]);
szByNum[0] = strlen(szByNum) - 1;
flushall();
printf("请输入乘数: ");
gets(&szNum[1]);
szNum[0] = strlen(szNum) - 1;
aryResult[0] = (int)szNum[0];
BigNumImul(szByNum, szNum, aryResult);
for (i = aryResult[0]; i > 0; i--)
{
printf("%d", aryResult[i]);
}
printf("\r\n");
system("pause");
return 0;
}