[算法题]大数乘法

题目链接: 大数乘法

解题思路: 先做无进位乘法, 将对应无进位的乘积累加起来, 最后做进位即可.

图示:

首先可以定义一个存储无进位乘积的累加和的数组, 一开始会对乘数进行逆序处理, 所以下标位置如图所示, 每个乘数的每位对应的乘积存放在数组中的乘数的各位的下标相加处, 比如 1 和 5 相乘的乘积累加到其对应下标 2 + 1 = 3 处:

最后再进行进位处理并将结果逆序回来即可, 需要注意在逆序回来前注意前导 0 的问题, 比如:

100 * 0 = 000

如果不处理会输出 3 个 0, 题解代码如下:

class Solution 
{
public:
    string solve(string s, string t) 
    {
        //先逆序
        reverse(s.begin(), s.end());
        reverse(t.begin(), t.end());

        vector<int> arr(s.size() + t.size() - 1);//存储无进位乘法累加和的数组

        //进行无进位乘法 -- 每个值累加在arr[s下标+t下标]
        for(int i = 0; i < s.size(); ++i)
        {
            for(int j = 0; j < t.size(); ++j)
            {
                arr[i + j] += (s[i] - '0') * (t[j] - '0');
            }
        }

        string res; //记录结果
        int add = 0; //记录进位
        //再进行进位
        for(int i = 0; i < arr.size(); ++i)
        {
            add += arr[i];
            res += (add % 10) + '0';
            add /= 10;
        }
        //处理剩于进位
        if(add)
        {
            res += add + '0';
        }

        //处理前导零
        for(int i = res.size() - 1; i >= 1; i--)
        {
            if(res.back() == '0')
            {
                res.pop_back();
            }
        }

        reverse(res.begin(), res.end()); //在逆序回来
        return res;
    }
};

相关推荐

  1. 算法】数论---乘法逆元

    2024-07-17 21:24:04       42 阅读
  2. [Pytorch]:PyTorch中张量乘法大全

    2024-07-17 21:24:04       26 阅读
  3. 算法-大数相乘

    2024-07-17 21:24:04       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 21:24:04       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 21:24:04       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 21:24:04       57 阅读
  4. Python语言-面向对象

    2024-07-17 21:24:04       68 阅读

热门阅读

  1. 后仿综述 Gate Level Simulation: A Comprehensive Overview

    2024-07-17 21:24:04       18 阅读
  2. Spring中事务是如何实现的?

    2024-07-17 21:24:04       20 阅读
  3. [C++11] 模板函数的默认模板参数

    2024-07-17 21:24:04       17 阅读
  4. python-Web

    2024-07-17 21:24:04       20 阅读
  5. 企业和个人在网络安全方面需承担哪些责任?

    2024-07-17 21:24:04       18 阅读
  6. mysql高版本(8.0+)group_by报错的处理方法

    2024-07-17 21:24:04       18 阅读
  7. arm64机器指令转换为汇编指令

    2024-07-17 21:24:04       21 阅读
  8. 【Python Cookbook】S03E07 处理无穷大以及NaN

    2024-07-17 21:24:04       18 阅读
  9. 构建新纪元:Gradle中Kotlin插件的配置全指南

    2024-07-17 21:24:04       22 阅读
  10. 软设之命令模式

    2024-07-17 21:24:04       21 阅读
  11. Linux系统中调试蓝牙的常用命令

    2024-07-17 21:24:04       19 阅读