zoukankan      html  css  js  c++  java
  • 大整数相乘

    1. 模拟手算
    2. 先不管所有进位计算,最后统一处理进位

    乘积的位数最大为两个相乘数的位数和,所以开始就可给定结果的位数。用result来表示每次相乘的和。

    具体代码:

    char * Mul(char * a, char * b)

    {

    char * result=(char *)malloc(strlen(a)+strlen(b), '0');  //两个数相乘,结果的位数不会超过它们的位数之和。

    memset(result, '0', strlen(a)+strlen(b));

        for (int i = b.length() - 1; i >= 0; --i)

        {

            int mul_carry = 0, add_carry = 0;  //记录乘法时的进位,加法时的进位

            for (int j = a.length() - 1; j >= 0; --j)

            {

                int temp = (b[i] - '0') * (a[j] - '0') + mul_carry;  //每位相乘的值

                mul_carry = temp / 10;  //记录进位

                temp %= 10;  //进位后的值

                int temp2 = result[i + j + 1] - '0' + temp + add_carry;

                result[i + j + 1] = temp2 % 10 + 48;  //设置相应位上的值和原本位上值相加后的值。

                add_carry = temp2 / 10;  //记录进位

            }

            result[i] += mul_carry + add_carry;

        }

        //如果首位是0,则从第二位开始输出

        if (result[0] == '0')

            result = result.substr(1, result.length());

        return result;

    }

  • 相关阅读:
    百度地图常用 获取中心点 缩放级别等
    sqlserver 临时表,多用户同时访问冲突吗?
    批量改ID 行形式
    C# post Json数据
    windows 激活venv问题
    spring 改变url
    conductor编译镜像
    springboot教程
    Microsoft Visual C++ Compiler for Python 2.7
    java 方法引用(method reference)
  • 原文地址:https://www.cnblogs.com/iwyou/p/12052448.html
Copyright © 2011-2022 走看看