前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【刷题】Leetcode 415 字符串相加 和 34 字符串相乘

【刷题】Leetcode 415 字符串相加 和 34 字符串相乘

作者头像
叫我龙翔
发布2024-03-11 08:34:03
1010
发布2024-03-11 08:34:03
举报
文章被收录于专栏:就业 C++ 综合学习

Leetcode 415 字符串相加

题目描述

逻辑很简单,对应位置相加,并进位即可。

思路一(模拟大法版!!!)

本题我们只需要对两个大整数模拟「竖式加法」的过程。竖式加法就是我们平常学习生活中常用的对两个整数相加的方法,回想一下我们在纸上对两个整数相加的操作,是不是将相同数位对齐,从低到高逐位相加,如果当前位和超过 10,则向高位进一位?因此我们只要将这个过程用代码写出来即可。

代码语言:javascript
复制
class Solution {
public:
    string addStrings(string num1, string num2) {

    int carry = 0;

    string::reverse_iterator it1 = num1.rbegin() ;
    string::reverse_iterator it2 = num2.rbegin() ;
    string res = "";

    while (it1 != num1.rend() || it2 != num2.rend() || carry) {

        int n1 = 0, n2 = 0;
        if (it1 != num1.rend()) {
            n1 = *it1 - '0';
            it1++;
        }
        if (it2 != num2.rend()) {
            n2 = *it2 - '0';
            it2++;
        }
        int result = n1 + n2 + carry;

        res += (result % 10) + '0';
        carry = result / 10;

    }

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

        return res;
    }
};

来看效果:

非常好!!!!!! 过啦!!!!!!!!

Leetcode 34 字符串相乘

题目描述

根据描述,这道题实际上就是模拟一下乘法运算,这是又又又用到了乘法器原理(实际上就是竖式运算),不得不说竖式运算真的是神!!!如果要用竖式乘法就要分布相乘,然后在加到一起,这时又会用到字符串相加的知识。所以这道题可谓一箭双雕。该题的难点应该是如何保证模拟过程的顺利进行。

思路一(模拟大法版)

  1. 两个乘数选择其一进行逐个相乘操作
  2. 每次相乘获得一个数 并 对应相对的数量级
  3. 每次相加到一起 这样就完成我们的操作。

如果num和num2之一是0,则直接将0作为结果返回即可。

如果num和num2都不是0,则可以通过模拟「竖式乘法」的方法计算乘积。从右往左遍历乘数,将乘数的每一位与被乘数相乘得到对应的结果,再将每次得到的结果累加。这道题中,被乘数是 num,乘数是num2。

需要注意的是,num2除了最低位以外,其余的每一位的运算结果都需要补0。 我们进行一下图解:

这样就看见进行我们的代码编写工作了!!! 干就完了! 如果看不出错误请在VS中进行调试哦!

代码语言:javascript
复制
class Solution {
public:
	//求和函数
    string addStrings(string num1, string num2) {
		//进位
        int carry = 0;
		//迭代器版
        string::reverse_iterator it1 = num1.rbegin();
        string::reverse_iterator it2 = num2.rbegin();
        string res = "";
		//加完为止
        while (it1 != num1.rend() || it2 != num2.rend() || carry) {
		// 进行计算
            int n1 = 0, n2 = 0;
            if (it1 != num1.rend()) {
                n1 = *it1 - '0';
                it1++;
            }
            if (it2 != num2.rend()) {
                n2 = *it2 - '0';
                it2++;
            }
            // 结果
            int result = n1 + n2 + carry;
			//该位置 为结果取余数
            res += (result % 10) + '0';
            //进位
            carry = result / 10;

        }
		//不要忘记反转!!!
        reverse(res.begin(), res.end());

        return res;
    }

    string multiply(string num1, string num2) {
        if (num1 == "0" || num2 == "0") return "0";
        //乘数1 
        int p1 = num1.size() - 1;

        string ans = "0";
        while (p1 >= 0) {

            //乘数2
            int p2 = num2.size() - 1;
            //开始乘  
            //数字 1  进位数  结果
            int carry = 0; string tmp = "";
            while (p2 >= 0 || carry) {
				//进行计算
                int n1 = 0, n2 = 0;
                if (p1 >= 0) {
                    n1 = num1[p1] - '0';
                }
                if (p2 >= 0) {
                    n2 = num2[p2] - '0';
                    p2--;
                }
				//该步的结果
                int result = n1 * n2 + carry;
                tmp += result % 10 + '0';
                carry = result / 10;

            }
			//不要忘记反转!!!
            reverse(tmp.begin(), tmp.end());
            //对应数量级一定要搞清楚
            for (int i = 0; i < num1.size() - p1 - 1; i++) {
                tmp += '0';
            }
            //加到答案中
            ans = addStrings(ans, tmp);
            p1--;
        }
        return ans;
    }
};

来看效果:

顺利通过!!! 为我们鼓掌!!!!!!! 送给大家一句我非常喜欢的名言: 我从来不相信什么懒洋洋的自由。我向往的自由是通过勤奋和努力实现的更广阔的人生。——山本耀司

Thanks♪(・ω・)ノ谢谢阅读!!!

下一篇文章见!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Leetcode 415 字符串相加
    • 题目描述
    • 思路一(模拟大法版!!!)
    • Leetcode 34 字符串相乘
      • 题目描述
      • 思路一(模拟大法版)
      • Thanks♪(・ω・)ノ谢谢阅读!!!
      • 下一篇文章见!!!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档