C 语言利用数组实现大数计算

#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;

}