[LeetCode] 43. Multiply Strings
2016-07-21 11:02
274 查看
思路:
就是找规律, 先把num1强行置为长度长的一个字符串, 然后用num2的每一位乘num1的每一位, 但是注意要从后向前遍历, 因为这才是我们做乘法时的规则啊, 所以要找好下标的规律. 最后有可能字符串前面有0, 把0跳过去再返回剩下的子串.
就是找规律, 先把num1强行置为长度长的一个字符串, 然后用num2的每一位乘num1的每一位, 但是注意要从后向前遍历, 因为这才是我们做乘法时的规则啊, 所以要找好下标的规律. 最后有可能字符串前面有0, 把0跳过去再返回剩下的子串.
string multiply(string num1, string num2) { if (num1 == "0" || num2 == "0") return "0"; if (num1 == "1") return num2; if (num2 == "1") return num1; // 强行使num1比较长 if (num1.length() < num2.length()) swap(num1, num2); int len1 = num1.lengt(), len2 = num2.length(); // 记得要初始化结果串 string res(len1 + len2, '0'); for (int j = len2 - 1; j >= 0; j--) { int carry = 0; for (int i = len1 - 1; i >= 0; i--) { // 每位乘每位的结果应该是乘积加上进位加上这位本来的数量 int prod = (num2[j] - '0') * (num1[i] - '0') + carry + (res[i + j + 1] - '0'); carry = prod / 10; // 把乘积结果的个位放到结果串的对应位置 res[i + j + 1] = prod % 10 + '0'; } // 如果还有进位, 那么就要把进位的数放到对应位置 if (carry) res[j] += carry; } // 跳过所有开头的0 for (int i = 0; i < res.length(); i++) if (res[i] != '0') return res.substr(i); return res; }
相关文章推荐
- VOS 系统报错,系统挂断 VOS不通,各种vos疑难杂病都在这里
- 视频背景抠图(opencv)
- 投票操作管理系统
- [编程题]最大子方阵
- WIN10 显示右下角应用图标
- Java 集合:Collection,List,ArrayList,Vector,LinkedList(实现方式,对比)
- dialog窗口打开新页面
- 网页设计中常用的Web安全字体
- Spring学习笔记3——消息队列(rabbitmq), 发送邮件
- X86&&X64 汇编学习——内联基础
- iOS开发--NSDate与NSDateFormatter的相关用法【转】
- 磁盘df看还有剩余空间,但是创建文件时报错,提示磁盘已经满问题解决
- ctags及taglist的安装和使用方法
- 大型网站技术架构
- Error:Execution failed for task ':app:processDebugManifest'.
- awakeFromNib方法中的注意
- 最新 Android屏幕适配全攻略(官方权威适配方案)
- Linux基础(19)软件磁盘阵列RAID
- PropertyPlaceholderConfigurer在spring获取属性文件
- 0.8.2kafka集群配置