【leetcode】 字符串相乘(大数相乘、相加)

news2024/11/14 14:53:11

记录一下大数相乘相加方法:

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

提示:

  • 1 <= num1.length, num2.length <= 200
  • num1 和 num2 只能由数字组成。
  • num1 和 num2 都不包含任何前导零,除了数字0本身。

原题:. - 力扣(LeetCode)

解题思路:

        由题目可知输入字符串的长度在[1,200],所以想转成整数再计算肯定是不行的,题目也要求了不能转换为整数。

        想一想小学教的列竖式进行计算乘法的步骤,例如:

          

两个数分称为num1 (1234)和num2(5678):

① num2 的个位(8)分别去与num1的每一位去相乘,得到一个数,同样以字符串的形式存储(数字太长也会溢出,存不了)

  • 字符  - ‘0’ 即可得到对应的数字
  • 相乘得到的结果取余push_back到string的一个变量中,同时记录进位情况
  • 个位算完后,反转一下得到第一层结果,同时需要再次转为字符存储(对每个字符进行+ ‘0’)操作
  • 将结果与"0"进行累加 

② num2 的十位同理按照1的步骤去分别与num1的每位数字相乘,记录得到的结果,然后再累加

③ 后面同理

        注意:记得补0 ,第一层不用补(以第一层为对齐),第二层补一个,第三层补2个。

④ 处理字符串相加:

        操作方法类似,相加的结果同样保存在字符串中。同样依次去除两个操作数的个位、十位等进行转换并累加,记录进位情况。

        将每次计算的和取余放到string中,然后反转---再转为字符串。

代码如下:

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

class Solution {
public:
    string stringMultipy(string num1, string num2) {
        if(num1 == "0" || num2 == "0") {
            return "0";
        }
        int m = num1.size();
        int n = num2.size();
        string ans = "0";
        for(int i = n -1; i >= 0 ; i--) {
            string cur;
            //每一层进行补零对齐
            for(int j = n -1; j > i; j--) {
                cur.push_back(0);
            }
            int x = num2.at(i) - '0';
            int add = 0;
            for(int j = m - 1; j >= 0 ; j--) {
                int y = num1.at(j) - '0';
                int result = x * y + add;
                cur.push_back(result % 10);
                add = result / 10;
            }
            if(add != 0) {
                cur.push_back(add % 10);
                add /= 10;
            }
            reverse(cur.begin(), cur.end());
            for(auto &c : cur) {
                c += '0';
            }
            ans = addString(ans, cur);
        }
        return ans;
    }

    string addString(string num1, string num2) {
        int m = num1.size() - 1;
        int n = num2.size() - 1;
        int add = 0;
        string ans;
        while(m >= 0 || n >= 0 || add != 0) {
            int x = m >= 0? num1.at(m) - '0' : 0;
            int y = n >= 0? num2.at(n) - '0' : 0;
            int result = x + y + add;
            ans.push_back(result % 10);
            add = result / 10;
            m--;
            n--;
        }
        reverse(ans.begin(), ans.end());
        for(auto &c : ans) {
            c += '0';
        }
        return ans;
    }
};

int main()
{
    string str1;
    string str2;
    cin >> str1 >> str2;
    Solution sol;
    cout << str1 << " * " << str2 << " = " << sol.stringMultipy(str1, str2) << endl;
    cout << str1 << " + " << str2 << " = " << sol.addString(str1, str2) << endl;

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1933217.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】联合体(union)

文章目录 1.联合体的含义2. 联合体的声明3. 联合体大小的计算4. 联合体的特点 1.联合体的含义 联合体也叫做共用体&#xff0c;是指联合体的所有成员共用同一块内存空间。这也就说明了&#xff0c;联合体的大小至少是其成员所占空间的最大值。 2. 联合体的声明 #include<…

CSS基础学习之元素定位(6)

目录 1、定位类型 2、取值 2.1、static 2.2、relative 2.3、absolute 2.4、fixed 2.5、stickty 3、示例 3.1、相对定位(relative) 3.2、绝对定位&#xff08;absolute&#xff09; 3.3、固定定位&#xff08;fixed&#xff09; 3.4、粘性定位&#xff08;sticky&…

力扣第九题(回文数)

9. 回文数 - 力扣&#xff08;LeetCode&#xff09; 提示 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数 是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读…

Husco在汽车自动变速器电磁阀总产量超1200万台最大汽车电磁阀线圈制造商Amisco同时高产量增长

Husco Inc.是一家位于美国威斯康星州的汽车零部件制造商&#xff0c;专门生产汽车自动变速器电磁阀。根据最新的数据&#xff0c;Husco的汽车自动变速器电磁阀总产量已经超过了1200万台&#xff0c;成为全球最大的汽车电磁阀生产商之一。 与此同时&#xff0c;Amisco是一家专门…

(21)起落架/可伸缩相机支架

文章目录 前言 1 连接到自动驾驶仪 2 通过任务规划器设置 3 其他参数 4 参数说明 前言 Copter 和 Plane 支持可伸缩的起落架/相机支架&#xff0c;由伺服机制激活&#xff08;如 Hobby King 出售的用于copters 的这些&#xff09;。齿轮/支架可以手动缩回或用一个辅助开关…

STM32 IAP 需要关注的一些事

1、首先要知道STM32的程序是如何分布在FLASH中的。 2、升级的时候涉及到两个程序&#xff0c;一个是bootloader&#xff0c;一个是user程序&#xff0c;这两个程序的功能分别的什么作用的&#xff1f; 3、编译的固件是怎么分布的&#xff1f;通过那个配置文件去指导编译器去排布…

Stable Diffusion:解锁AI绘画新纪元的保姆级入门指南

在这个数字艺术日新月异的时代&#xff0c;Stable Diffusion如同一股清新的风&#xff0c;吹散了传统绘画的界限&#xff0c;让每个人都能成为创意无限的数字艺术家。作为一款基于Transformer结构的文本到图像生成模型&#xff0c;Stable Diffusion以其惊人的生成速度、细腻的画…

Android 12系统源码_存储(二)StorageManagerService服务

前言 在 Android 系统中&#xff0c;StorageManagerService是一个用于获取存储设备信息和管理存储设备的服务。它提供了一系列方法&#xff0c;可以获取当前挂载的存储设备信息&#xff0c;以及对存储设备进行挂载和卸载操作。 一、Storage存储模块介绍 1.1、StorageManager…

思路|如何利用oneNote钓鱼?

本文仅用于技术研究学习&#xff0c;请遵守相关法律&#xff0c;禁止使用本文所提及的相关技术开展非法攻击行为&#xff0c;由于传播、利用本文所提供的信息而造成任何不良后果及损失&#xff0c;与本账号及作者无关。 本文来源无问社区&#xff0c;更多实战内容&#xff0c;…

GuLi商城-商品服务-API-属性分组-分组修改级联选择器回显

前端代码:略 后端回显接口: 递归方法: @Override publi

Airtest封装的Tidevice接口有多好用(一)

一、前言 很多同学都有在Windows电脑上连接本地iOS设备去进行测试的需求&#xff0c;其中tidevice库是大家在Windows上使用的最多的iOS通信库&#xff0c;其中有一些接口是我们比较常用的&#xff0c;所以Airtest这边对一些常用的接口进行了封装&#xff0c;供大家日常写脚本的…

【web】-反序列化-to_string

<?php highlight_file(__FILE__); class A{public $s;public function __destruct(){echo "hello".$this->s;}} class B{public $cmd;public function __toString(){system($this->cmd);return 1;} } unserialize($_GET[code]); __toString()当对象被当着…

Java小白入门到实战应用教程-变量

变量 说明 变量是存储数据的基础单元。通过变量我们可以在代码去获取变量的数据、操作变量的数据。换种说法就是数据的存储体。 比如我们现在声明一个变量&#xff0c;并用它来存放一个数字1&#xff1b; int a 1;那么此时这个变量的值就为1&#xff0c;也可以理解成这个变…

QT应用编程: window下QT程序异常捕获并生成DMP文件、PDB文件

文章目录 main.cpp代码捕获异常 生成dmp文件和pdb文件DebugTest生成错误代码注意 分析软件崩溃&#xff0c;除了需要dmp&#xff0c;还需要这个pdb文件 dmp&#xff0c;文件记录了崩溃的信息&#xff0c;而pdb&#xff08;代码工程数据库&#xff09;&#xff0c;则包含了你写的…

【机器学习-00】机器学习是什么?

在科技飞速发展的今天&#xff0c;机器学习已成为一个热门话题&#xff0c;广泛应用于各个行业和领域。那么&#xff0c;机器学习到底是什么&#xff1f;它又是如何工作的&#xff1f;本文将深入探讨机器学习的定义、原理及其在各领域的应用&#xff0c;带领读者走进这个神秘而…

FGF18:骨关节炎治疗靶标

成纤维细胞生长因子18&#xff08;FGF18&#xff09;属于FGF8亚家族成员&#xff0c;在细胞增殖、细胞分化和细胞迁移的调节中起重要作用&#xff0c;是正常骨化和骨骼发育所需&#xff0c;同时刺激肝脏和肠道增殖。 &#xff08;数据来源AlphaFold&#xff09; FGF18由207个氨…

arcgis怎么选取某个指定区域地方的数据,比如从全国乡镇数据选取长沙市乡镇数据

一共5个步骤&#xff0c;没一句废话&#xff0c;耐心看完。 1、如图&#xff0c;先将数据加载到arcgis里面&#xff0c;我们要选取里面长沙市的范围数据。 2、选取长沙市的语句 “市” like ‘长沙%’ 切记&#xff0c;切记&#xff0c;切记。所有符号要在 输入法英文状态…

重生奇迹mu智力妹妹的召唤技能

很多人错误地认为智能小帮手只是一种辅助职业&#xff0c;没有太多的攻击能力。但是实际情况是&#xff0c;有一些智能小帮手不仅能够提供辅助&#xff0c;而且还可以扮演输出角色。他们的技能加持可以配合召唤宠物的攻击和仇恨&#xff0c;在击败BOSS的过程中发挥重要作用。 召…

【I²C协议】STC89C51单片机IIC通信(代码+原理)

STC89C51单片机IIC通信 什么是IC协议特点构成 通信协议开始信号、结束信号、应答信号数据传输 代码示例 什么是IC协议 IIC,即IC&#xff0c;全称 Inter-Integrated Circuit&#xff0c;字面上的意思是集成电路之间&#xff0c;它其实是IC Bus简称&#xff0c;所以中文应该叫 集…

ELK企业级日志分析

目 录 一、ELK简介 1.1 elasticsearch简介 1.2 logstash简介 1.3 kibana简介 1.4 ELK的好处 1.5 ELK的工作原理 二、部署ELK 2.1 部署elasticsearch(集群) 2.1.1 修改配置文件 2.1.2 修改系统参数 2.1.2.1 修改systemmd服务管理器 2.1.2.2 性能调优参数 2.1.2.3 …