【leetcode 43】--------Multiply Strings
来源:互联网 发布:数据库存储emoji表情 编辑:程序博客网 时间:2024/06/01 08:46
/*要求:给定两个String,计算String所代表的数的乘积注意点:既然给的是String,那么就要求不能用long和int,因为String转换成数值可能会越界,只能一位一位乘思路:利用计算乘法的步骤,即竖乘的方法关键:(1)结果数组中进位的就算,比如234 * 56,6先分别和2,3,4相乘,计算每一次的进位,然后5再分别和2,3,4相乘,计算每一次的进位, 同时因为没计算一次就要存到数组中,结合实际,上边的两次大循环只是分别计算了每次的乘积,而最终结果是要将两者相加,所以 相加的时候还有进位,所以一个用来存放5或6与234相乘的进位,另一个用来存放两次相乘结果相加的进位 */public class OJ_43 { public String multiply(String num1, String num2) { //num1位于竖乘的上边,num2位于下边 if(num1.equals("0") || num2.equals("0")){ return "0"; } String result = ""; int[] ret = new int[num1.length() + num2.length()]; //存放数值型结果,且两个数相乘结果的最大位数是两个数的位数之和 int retIndex = ret.length -1; int multiple; //multiple是每一次乘积与上一次乘积和的mol10值 for(int j = num2.length()-1; j >= 0;j--,retIndex--){ int arrayCarry = 0; //表示数组中后一位给前一位的进位,即相当于564 * 23 时3 * 564和2 * 564求和时的进位 int multipleCarry = 0; //表示每两个数相乘的进位以及数组进位的和即总进位 for(int i = num1.length()-1,x = retIndex; i >= 0;i--,x--){ multiple = ((num1.charAt(i) - '0') * (num2.charAt(j) - '0') % 10 + multipleCarry) % 10; arrayCarry = (ret[x] + multiple) / 10; //这个进位肯定最大为1啦 ret[x] = (ret[x] + multiple) % 10; multipleCarry = ((num1.charAt(i) - '0') * (num2.charAt(j) - '0') + multipleCarry)/10 + arrayCarry; if(i==0&&multipleCarry!=0){ ret[x-1] = multipleCarry; } } } //转为字符串 int startIndex = 0; //去掉最高位的0 if(ret[0]==0){ startIndex = 1; } for(int i = startIndex;i < ret.length;i++){ result = result + ret[i] + ""; } return result; }}
0 0
- LeetCode(43) Multiply Strings
- [leetcode 43] Multiply Strings
- [LeetCode 43]Multiply Strings
- leetcode || 43、Multiply Strings
- leetcode-43 Multiply Strings
- Multiply Strings leetcode 43
- leetcode 43: Multiply Strings
- Leetcode 43 Multiply Strings
- leetcode 43 : Multiply Strings
- Leetcode #43 Multiply Strings
- leetcode 43: Multiply Strings
- LeetCode(43) Multiply Strings
- LeetCode-43 Multiply Strings
- Leetcode#43||Multiply Strings
- [Leetcode]#43 Multiply Strings
- leetcode-43 Multiply Strings
- leetcode 43:Multiply Strings
- 【leetcode 43】--------Multiply Strings
- CUDA基础
- android volley通信框架解析
- 对函数依赖的推导的认识
- ListBox 水平滚动条智能滚动的实现方法
- Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案
- 【leetcode 43】--------Multiply Strings
- hdu--1856
- 我之不堪
- Android:FragmentTransaction的commit 和addToBackStack的方法随记
- python操作redis简单例子
- iOS开发之SDCycleScrollView
- Linux之PPP配置
- 三星Note2 SCH-N719刷机教程
- 带有指示器的自定义底部导航栏的实现