cout输出字符串_leetcode C++题解系列-042 字符串相乘
题目
给定两个以字符串形式表示的非负整数 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";
提交 .
cout输出字符串_leetcode C++题解系列-042 字符串相乘相关推荐
- 字符串不替代_TI-Nspire 系列的字符串操作
本文遵循 CC BY-NC-SA 协议. 一 前言 在编程中,对字符串进行操作是很常见的.但是TI-Nsipre 对字符进行操作的函数有限,缺少一些如在字符串中插入字符.删除字符等常用功能,给编程带来 ...
- redis 系列10 字符串对象
redis 系列10 字符串对象 原文:redis 系列10 字符串对象 一. 字符串对象编码 Redis中字符串可以存储3种类型,分别是字节串(byte string).整数.浮点数.在上章节中讲到 ...
- c++ 总结之 cout输出
目录 使用 cout 输出 cout 与 << 运算符 cout 基本类型 cout 指针 cout 拼接输出 cout 与 put() cout 与 write() 使用 cout 格式 ...
- Python CheckiO 题解系列 丨 博客目录索引
CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本题解系列主要记录自己在用 Python 闯关时的做 ...
- php output详解,PHP输出缓冲控制Output Control系列函数详解,output函数详解
PHP输出缓冲控制Output Control系列函数详解,output函数详解 概述 以前研究过PHP的输入输出缓冲,不过博客搬家以后,原来文章找不到了,今天看到一篇好文,顺便转载过来. 简介 说到 ...
- 力扣 旋转字符串 C语言 题解
力扣 旋转字符串 文章目录 力扣 旋转字符串 一.完整题目 二.解题思路 三.编写代码 四.测评结果 五.总结评价 一.完整题目 给定两个字符串, s 和 goal. 如果在若干次旋转操作之后,s 能 ...
- python正则表达式中的r与转义字符_左手用R右手Python系列13——字符串处理与正则表达式...
原标题:左手用R右手Python系列13--字符串处理与正则表达式 杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化.个 ...
- Python连载系列:字符串和常见数据类型
Python连载系列:字符串和常见数据类型 github地址:https://github.com/hellgoddess/PythonGuide 字符串和常见数据类型 列表基本用法 - 定义列表 / ...
- 【编程面试系列】字符串总结
数据结构 字符串 1 旋转字符串 给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部, 如把字符串"abcdef"前面的2个字符'a'和'b'移动到字符串的尾部,使得原 ...
最新文章
- 谷歌小姐姐开源姿势动画师项目,组合现有TF模型,只需一张SVG图片便可配置...
- NDK历史版本下载方法
- 安全漏洞——如何查找和修复它们
- 【知识索引】【李宏毅机器学习】
- mac jenkins下载与安装
- Amaze UI貌似挂了。。。附上amaze UI框架的图标
- 阿里云企业邮箱的imap和pop3设置
- win7怎么查找网络上的计算机,Win7系统无法查看工作组计算机如何解决? Win7系统查看工作组计算机的方法...
- Photoshop 抠图(基础篇)
- windows 通过快捷键来复制粘贴当前日期时间到剪贴板
- gsm无线热点数据采集服务器,GSM无线网络优化及WLAN热点分析工具开发
- 【内推】阿里云 云原生团队 2022 届秋招
- 给你看个宝贝:GitHub 最野的开源库,把你拿捏的死死的。。。
- Create BD link
- 防火墙软件Netfilter之包过滤技术(转)
- 通过域名访问接口,报400
- qsort 用法详解
- 西南科技大学Linux实验名称:实验二 Linux环境网络管理
- 巴比特 | 元宇宙每日必读:杭州亚运会组委会将发售“亚运在中国”系列数字藏品;“戏曲元宇宙”戏曲元宇宙”是啥?怎么建?...
- python给折线图区间填充颜色_Python气象数据处理与绘图(3):以EOF为例画柱状图(折线图)和带地图底图的填色图...
热门文章
- QT5主界面“关闭窗口”按钮设置弹出提示询问信息
- 基于Python的开源人脸识别库,离线识别率高达99.38%
- 手把手带你玩转Tensorflow 物体检测 API (3)——训练模型
- 使用mysqldump 导出sql数据
- yii2 提供接口给java_yii2写api接口步骤
- 疯狂java讲义价格_疯狂java讲义
- 11210怎么等于24_想要消耗100大卡热量,怎么做才最简单?
- linux中cv调用摄像头,ubuntu中opencv调用摄像头
- java smp_什么是SMP系统
- python 默认配置文件_python各类配置文件写法