leetcode_day04

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

答案:

class Solution {
    public String multiply(String num1, String num2) { /** num1的第i位(高位从0开始)和num2的第j位相乘的结果在乘积中的位置是[i+j, i+j+1] 例: 123 * 45, 123的第1位 2 和45的第0位 4 乘积 08 存放在结果的第[1, 2]位中 index: 0 1 2 3 4 1 2 3 * 4 5 --------- 1 5 1 0 0 5 --------- 0 6 1 5 1 2 0 8 0 4 --------- 0 5 5 3 5 这样我们就可以单独都对每一位进行相乘计算把结果存入相应的index中 **/ int n1 = num1.length()-1; int n2 = num2.length()-1; if(n1 < 0 || n2 < 0) return ""; int[] mul = new int[n1+n2+2]; for(int i = n1; i >= 0; --i) { for(int j = n2; j >= 0; --j) { int bitmul = (num1.charAt(i)-'0') * (num2.charAt(j)-'0'); bitmul += mul[i+j+1]; // 先加低位判断是否有新的进位 mul[i+j] += bitmul / 10; mul[i+j+1] = bitmul % 10; } } StringBuilder sb = new StringBuilder(); int i = 0; // 去掉前导0 while(i < mul.length-1 && mul[i] == 0) i++; for(; i < mul.length; ++i) sb.append(mul[i]); return sb.toString(); } } 
3 个月前

说明:https://blog.csdn.net/afei__/article/details/83891547

class Solution {
    public String multiply(String num1, String num2) { char[] value = new char[num1.length() + num2.length()]; for (int i = num1.length() - 1; i >= 0; i--) { for (int j = num2.length() - 1; j >= 0; j--) { value[i + j + 1] += (num1.charAt(i) - '0') * (num2.charAt(j) - '0'); } } // 处理进位 int carry = 0; for (int i = value.length - 1; i >= 0; i--) { value[i] += carry; carry = value[i] / 10; value[i] %= 10; } int beginIndex = 0; while (beginIndex < value.length - 1 && value[beginIndex] == 0) { beginIndex++; } for (int i = beginIndex; i < value.length; i++) { value[i] += '0'; } return new String(value, beginIndex, value.length - beginIndex); } }
还得琢么

猜你喜欢

转载自www.cnblogs.com/tommyngx/p/10463193.html