class Solution { public String multiply(String num1, String num2) { //用num1的每一位去乘num2的每一位 int i = num1.length() - 1; String res = ""; int carry = 0; while(i >= 0){ StringBuilder temp = new StringBuilder(""); //再每次循环的时候在后面填上对应的0 for(int k = 0; k < num1.length() - 1 - i; k++){ temp.append("0"); } int n1 = num1.charAt(i) - '0'; carry = 0; for(int j = num2.length() - 1; j >= 0; j--){ int n2 = num2.charAt(j) - '0'; int sum = n1 * n2 + carry; carry = sum / 10; sum = sum % 10; temp.append(sum); } if(carry > 0){ temp.append(carry); } res = addSum(temp.reverse().toString(), res); i--; } //去掉多余的前缀0 while(res.length() > 1 && res.charAt(0) == '0'){ res = res.substring(1); } return res; } //下面的方法引用了415题的代码 https://www.cnblogs.com/zhaijiayu/p/11525566.html private String addSum(String num1, String num2){ int i = num1.length() - 1; int j = num2.length() - 1; int carry = 0; StringBuilder res = new StringBuilder(""); while(i >= 0 || j >= 0){ int n1 = i >= 0 ? num1.charAt(i) - '0' : 0; int n2 = j >= 0 ? num2.charAt(j) - '0' : 0; int sum = n1 + n2 + carry; carry = sum / 10; sum = sum % 10; res.append(sum); i--; j--; } if(1 == carry){ res.append("1"); } return res.reverse().toString(); } }
43
猜你喜欢
转载自www.cnblogs.com/zhaijiayu/p/11526696.html
今日推荐
周排行