[leetcode] 43.Multiply Strings
2015-08-31 00:33
453 查看
题目:
Given two numbers represented as strings, return multiplication of the numbers as a string.
Note: The numbers can be arbitrarily large and are non-negative.
题意:
给定两个字符串形式的整数,每个整数都是非负的,并且是任意大的。求出两者乘积的字符串表示。
思路:
我们不妨思考当初小学学习数学时手动乘法的方法。比如23*14,那么先让4与23相乘,然后让1与23相乘,不过此时要将这一位的乘积往左移动一位,就相当于在这一位的乘积末尾加了一个0。然后让两个位上的乘积相加。
所以我们需要做的就是计算乘数的每一位与被乘数的乘积,并且加上先前位数上的结果。实现一个字符串的加法函数作为辅助函数。
以上。
代码如下:
Given two numbers represented as strings, return multiplication of the numbers as a string.
Note: The numbers can be arbitrarily large and are non-negative.
题意:
给定两个字符串形式的整数,每个整数都是非负的,并且是任意大的。求出两者乘积的字符串表示。
思路:
我们不妨思考当初小学学习数学时手动乘法的方法。比如23*14,那么先让4与23相乘,然后让1与23相乘,不过此时要将这一位的乘积往左移动一位,就相当于在这一位的乘积末尾加了一个0。然后让两个位上的乘积相加。
所以我们需要做的就是计算乘数的每一位与被乘数的乘积,并且加上先前位数上的结果。实现一个字符串的加法函数作为辅助函数。
以上。
代码如下:
class Solution { public: string multiply(string num1, string num2) { int len1 = num1.length(); int len2 = num2.length(); if (len1 == 0 || len2 == 0)return ""; if (len2 > len1) { swap(num1, num2); swap(len1, len2); } string result = ""; int addZero = 0; for (int i = len2 - 1; i >= 0; i--) { int carry = 0; string temp(len1, ' '); for (int j = len1 - 1; j >= 0; j--) { int multiRes = (num2[i] - '0') * (num1[j] - '0') + carry; carry = multiRes / 10; multiRes %= 10; temp[j] = multiRes + '0'; } if (carry != 0) temp = char(carry + '0') + temp; string zeros(addZero, '0'); temp += zeros; result = add(result, temp); addZero++; } int i = 0; while (i < result.size() && result[i] == '0')i++; return (i == result.size())?"0":result.substr(i); } string add(string num1, string num2) { int len1 = num1.length(); int len2 = num2.length(); if (len2 > len1) { swap(len1, len2); swap(num1, num2); } num2 = string(len1 - len2, '0') + num2; string result(len1, ' '); int carry = 0; for (int i = len1 - 1; i >= 0; i--) { int sum = (num1[i] - '0') + (num2[i] - '0') + carry; carry = sum / 10; sum %= 10; result[i] = sum + '0'; } if (carry)result = "1" + result; return result; } };
相关文章推荐
- UVALive - 3972 March of the Penguins(最大流+枚举)
- JS 浮点数四则运算精度丢失
- 例题3.20 图询问 LA5031
- 转载:oracle null处理
- sphinx (coreseek)——3、区段查询 与 增量索引实例
- php中ajax跨域请求---小记
- 惠普学习体会
- 大数据递归栈溢出问题
- Dockerfile构建本地镜像
- 所经历的大文件数据导出(后台执行,自动生成)
- QQ音乐/酷狗音乐锁屏控制实现原理
- Python源码剖析笔记6-函数机制
- Android Studio 笔记之SexyEditor,设置背景
- Testlink简单管理流程
- Life & Work
- UVALive - 2531 The K-League(最大流+枚举)
- hadoop 配置集群之间SSH无密码登陆 (重点推荐)
- ACdream1726 A Math game(dfs)
- [置顶] 将项目从tomcat 迁移到JBoss
- Android CheckBox