zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    Leetcode 15
    setjmp和longjmp重复使用的问题
    linux的下两种定时器实现
    linux中的信号处理
    【推荐软件】ack
    《代码大全》阅读心得二
    更换svn diff为vimdiff
    unpack的一点使用问题
    【lua】table是否为空的判断
    vi复制部分字符
  • 原文地址:https://www.cnblogs.com/w413133157/p/1650617.html
Copyright © 2011-2022 走看看