【笔试强训_Day06】

文章目录

1.字符串相乘

题目链接

  • 解题思路:

高精度乘法,注意要学会下面这种列式相乘的形式🍎

注意细节❗:🍎 首先把列式相乘的数据都存放到数组中去, 然后再对数组中的数据进行取余进位 操作。

②🐟 要注意处理前导 0 的情况。

③🐟 注意当只有一位数字 0 的时候。

  • 实现代码:
cpp 复制代码
class Solution {
public:
    string multiply(string num1, string num2) {

        if (num1.size() == 1 && num1[0] == '0') return "0";
        if (num2.size() == 1 && num2[0] == '0') return "0";

        reverse(num1.begin(), num1.end());
        reverse(num2.begin(), num2.end());

        int n = num1.size(), m = num2.size();

        // 把每个位数先乘出来然后存放到这个数组中
        vector<int> num(n + m);
        for (int i = 0; i < m; i++)
        {
            for (int j = 0; j < n; j++)
                num[i + j] += (num1[j] - '0') * (num2[i] - '0');
        }

        // 处理进位
        string res = "";
        int t = 0;  // t 表示进位
        for (auto& x : num)
        {
            res += ((x + t) % 10 + '0');
            t = (x + t) / 10;
        }

        // 最后一个进位还没有处理
        while (t > 0)
        {
            res += t % 10 + '0';
            t /= 10;
        }

        // 去掉前导 0 
        while (res.back() == '0')
            res.pop_back();

        reverse(res.begin(), res.end());

        return res;
    }
};
相关推荐
南宫生1 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法
懒惰才能让科技进步2 小时前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
Ni-Guvara2 小时前
函数对象笔记
c++·算法
泉崎2 小时前
11.7比赛总结
数据结构·算法
你好helloworld2 小时前
滑动窗口最大值
数据结构·算法·leetcode
AI街潜水的八角3 小时前
基于C++的决策树C4.5机器学习算法(不调包)
c++·算法·决策树·机器学习
白榆maple3 小时前
(蓝桥杯C/C++)——基础算法(下)
算法
JSU_曾是此间年少3 小时前
数据结构——线性表与链表
数据结构·c++·算法
此生只爱蛋4 小时前
【手撕排序2】快速排序
c语言·c++·算法·排序算法
咕咕吖5 小时前
对称二叉树(力扣101)
算法·leetcode·职场和发展