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

 

posted on 2010-01-18 12:50  o无尘o  阅读(1292)  评论(0编辑  收藏  举报