cout输出字符串_leetcode C++题解系列-042 字符串相乘

2567052f746b5abb67e14ac3f692dc7a.png

题目

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例 2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1 和 num2 的长度小于110。num1 和 num2 只包含数字 0-9。num1 和 num2 均不以零开头,除非是数字 0 本身。不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。通过次数71,351提交次数167,877

解题代码与测试

 Created by tannzh on 2020/7/7.///* * 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例 2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1 和 num2 的长度小于110。num1 和 num2 只包含数字 0-9。num1 和 num2 均不以零开头,除非是数字 0 本身。不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。 */#include #include using std::string;class Solution {public:    string multiply(string num1, string num2) {        string ret(num1.size() + num2.size(), '0');        for (int i = num1.size()-1; i >= 0; --i) {            int carry = 0;            for (int j = num2.size()-1; j >= 0; --j) {                int sum = (ret[i+j+1]-'0') + (num1[i]-'0') * (num2[j]-'0') + carry;                ret[i+j+1] = sum%10 + '0';                carry = sum/10;            }            ret[i] += carry;        }        size_t pos = ret.find_first_not_of('0');        if (pos != string::npos) return ret.substr(pos);        else return "0";    }};int main(int argc, char **argv){    std::string num1 = "123", num2 = "456";    std::string num3 = "2", num4 = "3";    Solution s;    std::cout << s.multiply(num1, num2) << std::endl;    std::cout << s.multiply(num3, num4) << std::endl;    return 0;}

解题思路分析

这道题就是考察大数乘法了。

我们还是从简单的例子来分析:

1234567 *8901234

想想,乘法是如何运算的,用比较小的数举例,更好理解:

    23 *    43    ----    69 +   92   -----   989

我们将 43 视作 num1, 23 视作 num2, 那么这是一个很明显的两级 for 循环。从尾部开始,外部遍历 num1, 内部遍历 num2. 注意进位。

如果给定的是字符串,显然,我们是从字符串的末尾开始遍历的。

另外一个隐藏的规律是:num1 * num2 结果的位数必然小于 num1 的位数 + num2 的位数。 所以可以设结果为 string ret(num1.size() + num2.size(), '0');

for (size_t i = num1.size()-1; i >= 0; --i) {    int carry = 0;    for (size_t j = num2.size()-1; j >= 0; --j) {        int sum = (ret[i+j+1] - '0') + (num1[i] - '0') * (num2[j] - '0') + carry;        ret[i+j+1] = sum % 10 + '0';        carry = sum / 10;    }    ret[i] += carry;}

得到的结果依旧是从尾部开始铺陈开的,所以最终还要去掉开头初始化时的 0。

size_t pos = ret.find_first_not_of('0');if (pos != string::npos) return ret.substr(pos);else return "0";

提交 .

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

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

相关文章

python序列类型举例说明_Python(第八课,序列类型)

引言&#xff1a; 我们之前学过整数&#xff0c;浮点数&#xff0c;字符串&#xff0c;今天带来的更具有包容性。 今天带来的是高级数据类型&#xff0c;包括列表&#xff0c;元组&#xff0c;集合和字典。根据他们特性不同&#xff0c;可以分为序列类型&#xff0c;集合类型&a…

上传附件_留学落户|上传附件预审时一定一定要注意的问题!

点击上方蓝色字体&#xff0c;关注启铭君。www.minqifudao.com启铭君相信大家都知道&#xff0c;从2019年留学落户“一网通办”新系统上线&#xff0c;可以在网上进行材料申报&#xff0c;“让数据多走路&#xff0c;让群众少跑腿”。在新系统中填报资料&#xff0c;怎样才能做…

python获取对象的大小_Python实现计算对象的内存大小示例

本文实例讲述了Python实现计算对象的内存大小。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 一般的sys.getsizeof()显示不了复杂的字典。 查看类中的内容&#xff1a; def dump(obj): for attr in dir(obj):#dir显示类的所有方法 print(" obj.%s %r" % (…

python斐波那契数列30_python的30个骚操作

1、冒泡排序2、计算x的n次方的方法3、计算a*a b*b c*c ……4、计算阶乘 n!5、列出当前目录下的所有文件和目录名6、把一个list中所有的字符串变成小写&#xff1a;7、输出某个路径下的所有文件和文件夹的路径8、输出某个路径及其子目录下的所有文件路径9、输出某个路径及其子…

sqlplus 镜像_【Docker】拉取Oracle 11g镜像配置

以下是基于阿里云服务器Centos 7操作1.拉取Oracle11g镜像docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g等待下载即可……下载完成后&#xff0c;使用下列命令查看镜像docker images从上图可以清楚看到镜像拉取完毕2.创建容器docker run -d -p 1521:1521 -…

python中值滤波介绍_Python 实现中值滤波、均值滤波的方法

红包&#xff1a;Lena椒盐噪声图片&#xff1a;# -*- coding: utf-8 -*- """ Created on Sat Oct 14 22:16:47 2017 author: Don """ from tkinter import * from skimage import io import numpy as np imio.imread(lena_sp.jpg, as_greyTrue) …

竖向图片插入_Word小技巧:让你的图片文字排版更有创意

想在头条中发表文章或者写论文&#xff0c;插入的图片太单调&#xff1f;今天小编就简单跟大家分享几个小技巧&#xff0c;图片搭配文字让你的版面更有可读性。第一种&#xff1a;最简单的横向文字排版具体做法&#xff1a;在word中插入图片后&#xff0c;插入一个文本框后输入…

11有没有压力感应_特殊感应器赋予机械手多维触感

最新研发的机械触感装备&#xff0c;已经不仅具有可伸展的韧性&#xff0c;还具有感知压力、形变和拉力的功能&#xff0c;将为软体机器人、虚拟现实(VR)和现实增强(AR)等设备带来革命性的巨变。美国康乃尔大学(Cornell University)工程学院副教授谢泼德(Rob Shepherd)说&#…

如何用手机打开dcm格式图片_如何防止自己的图片被盗用?这 4 招教你优雅加水印...

出门旅游一趟&#xff0c;好不容易拍到一组相当满意的图片。想要把这些图片上传到社交平台&#xff0c;如何才能让大家一看就知道这是自己拍的作品&#xff0c;同时又防止盗图呢&#xff1f;答案是在图片上加上自己的水印&#xff0c;这次有用功将和大家分享下&#xff0c;如何…

python 堆_面试再问你什么是堆和栈,你就把这篇文章甩给他

栈&#xff1a;管程序如何运行的&#xff0c;程序如何执行&#xff0c;如何处理数据。(局部变量其实也是存在栈中的&#xff0c;引用数据类型在栈中存的是地址引用)(栈的空间就不需要那么大了)堆&#xff1a;管数据存储的。(引用数据类型的存放,所以堆的空间是比较大的)生活理解…

3d 仪表盘_新一代标致2008官图发布 配备3D全息仪表盘

【太平洋汽车网 新车频道】标致发布了新一代2008的官图&#xff0c;新车基于PSA集团的CMP平台打造&#xff0c;采用了标致最新一代的家族式设计语言&#xff0c;造型风格极具辨识度。据悉&#xff0c;新一代2008将提供汽油、柴油和纯电动三种动力版本供消费者选择&#xff0c;其…

python人脸识别程序如何嵌入到app_只用Python就能写安卓,简单几步实现人脸识别的App...

最近闲来无事&#xff0c;研究研究在安卓上跑Python。 想起以前玩过的kivy技术&#xff0c;kivy[1]是一个跨平台的UI框架。当然对我们最有用的是&#xff0c;kivy可以把python代码打包成安卓App。但是由于安卓打包的工具链很长&#xff0c;包括android sdk打包java代码、ndk编译…

requirejs加载顺序_教你5分钟学会用requirejs(必看篇)

requirejs是干啥的啊&#xff1f;曾经&#xff0c;我们将一些js组件放到不同的文件&#xff0c;然后通过script标签引入&#xff0c;如果几个组件有依赖&#xff0c;那么要小心了&#xff0c;你必须将被依赖的放到前面&#xff0c;否则的话会出现啥啥啥is undefined或者啥啥啥i…

object htmldivelement什么意思_深入探究 Function amp; Object 鸡蛋问题

&#xff08;给前端树加星标&#xff0c;提升前端技能&#xff09;转自&#xff1a;高级前端进阶引言上篇文章用图解的方式向大家介绍了原型链及其继承方案&#xff0c;在介绍原型链继承的过程中讲解原型链运作机制以及属性遮蔽等知识&#xff0c;今天这篇文章就来深入探究下 F…

如何拉取k8s镜像_K8s 从懵圈到熟练 – 镜像拉取这件小事

导读&#xff1a;相比 K8s 集群的其他功能&#xff0c;私有镜像的自动拉取&#xff0c;看起来可能是比较简单的。而镜像拉取失败&#xff0c;大多数情况下都和权限有关。所以&#xff0c;在处理相关问题的时候&#xff0c;我们往往会轻松的说&#xff1a;这问题很简单&#xff…

python中getopt函数_Python中getopt()函数的使用

在运行程序时&#xff0c;可能需要根据不同的条件&#xff0c;输入不同的命令行选项来实现不同的功能。目前有短选项和长选项两种格式。短选项格式为"-"加上单个字母选项&#xff1b;长选项为"--"加上一个单词。长格式是在Linux下引入的。许多Linux程序都支…

企业微信加密消息体_微信公众平台开发者中心安全模式消息体加解密实现

关键字&#xff1a;微信公众平台 消息体签名 消息体加解密 EncodingAESKey 安全模式一、消息体加解密微信公众平台在配置服务器时&#xff0c;提供了3种加解密的模式供开发者选择&#xff0c;即明文模式、兼容模式、安全模式,选择兼容模式和安全模式前&#xff0c;需在开发者中…

hadoop没有datanode_Hadoop运行在Kubernetes平台实践

Hadoop与Kubernetes就好像江湖里的两大绝世高手&#xff0c;一个是成名已久的长者&#xff0c;至今仍然名声远扬&#xff0c;一个则是初出茅庐的青涩少年&#xff0c;骨骼惊奇&#xff0c;不走寻常路&#xff0c;一出手便惊诧了整个武林。Hadoop与Kubernetes之间有很深的渊源&a…

mysql text类型 使用方法_MySQL使用TEXT/BLOB类型的知识点详解

一、TEXT和BLOB的区别TEXT和BLOB家族之间仅有的不同是BLOB类型存储的是二进制数据&#xff0c;没有排序规则或字符集&#xff0c;而TEXT类型有字符集或排序规则。说白了如果要储存中文则选择TEXT。二、默认值问题Strict Mode下不能设置默认值&#xff0c;否则会报cant have a d…

git 修改commit_Git从8到13 深入了解Git特性

上一章简单的介绍了一些常用的Git命令&#xff0c;这一章主要是深入了解一下Git的稍微高级的一些知识和指令。8.首先我们先来通过查看Git目录里面的文件来深入了解一下Git版本控制的构造。 查看HEAD可以知道当前所在的分支。在config文件里面存储着Git里面的一些配置信息&#…