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

本文介绍了一种用于实现大数乘法的算法,并通过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;
}

 

转载于:https://www.cnblogs.com/w413133157/archive/2010/01/18/1650617.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值