| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 《力扣刷刷》字符串相乘 -> 正文阅读 |
|
[数据结构与算法]《力扣刷刷》字符串相乘 |
这道题写完挺有意义的,有比较多的细节部分,这里慢慢与大家分享。 需要说明的是:我使用的是C++,虽然思路最为重要,但有熟悉的代码参阅还是比较舒服的。 题目:求两字符串转成整数之后,然后相乘,最后以字符串的形式返回结果。 思考:
这里直接调用库函数来将字符串转换成整形,再相乘,再转换成字符串。 这样对于结果小于max_int的可以,但很大的数字相乘却不行,况且题目要求不能使用库直接将字符串转换成整数。 我们就要考虑另一种思路了,这里提供一个模拟整数乘法的思路。 其实也可以试一试把乘法转加法,毕竟加法的实现比乘法难度低一点。 思路: 模拟计算两个整数相乘的过程。 如:893*256 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??8? ? ? 9? ? ? 3 ? ? ? ? ? ? ? ? ? ? ? ? x? ? ??2? ? ? 5? ? ? 6 ? ? ? ? ? ? ? ? ? ? ? ? ? ----------------------- ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? 48? ? 54? ? 18 ? ? ? ? ? ? ? ? ?? ?? 40? ?? 45? ? 15 ? ? ? ? ? ?16? ? ? 18? ? ? 6 --------------------------------------------------------------------- ? ? ? ? ? ?16? ? ? 58? ? ?99? ? ? 69? ? ?18 ---------------------------------------------------------------------? ? ? ? ? ? ? 16? ? ? ?58? ? ?99? ? ?70? ? ? 8 --------------------------------------------------------------------- ? ? ? ? ? ? 16? ? ? ?58? ? ?106? ? ?0? ?? ? 8 --------------------------------------------------------------------- ? ? ? ? ? ? 16? ? ? ? 68?? ? ?6? ? ? ? 0? ? ? ?8 --------------------------------------------------------------------- ? ? ? ? ? ? 22? ? ? ???8? ? ? ?6? ? ? ? ?0? ? ? ?8 --------------------------------------------------------------------- ? ? ? ? ? ? ?2? ? ? ? ? 2? ? ? ? 8? ? ? ? ?6? ? ? ?0? ? ? ? 8 先用一个双层for循环将字符转换后的数字相乘结果放入新的整形数组中,由于要对整形数组元素进行+=操作,需要将整形数组提前初始化为0。
需要解决的问题是:我们应该开多大的数组空间? 我们可以开num1.size()+num2.size()个空间大小的数组。 以结果的角度来看,最后结果的位数一定小于num1.size()+num2.size()。 那么先暂时开这么大的空间大小。 之后我们需要从低位向高位依次进位,这需要我们知道数组中最后的有效数字下标。 巧妙的是:两个for循环直接解决了我们的问题,num1.size()+num2.size()-2就是最后一个元素的下标,那么总共就有num1.size()+num2.size()-1的有效位。(这一点是解题的关键) 那么我们只需要开num1.size()+num2.size()-1个数的数组,当然开大一点也没关系,重要的是我们找到了最后一个有效位的下标,这对我们后续从低位向高位进位和整形数组转换成字符串起了很大作用。 针对893*256的上述例子: 数组中最后存的是{ 22、8、6、0、8} 进位的代码:
最后一步就是将数组中的数字转为字符串。 这里注意的是,不能这样转换。
因为a[0]可能是2位以上的数字。以893*256的为例,a[0]是22,上面的这种转换会存在问题。 参考:
完整代码:
链接:力扣 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:21:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |