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.
public class Solution { public String multiply(String num1, String num2) { // Start typing your Java solution below // DO NOT write main() function String n1 = new StringBuilder(num1).reverse().toString(); String n2 = new StringBuilder(num2).reverse().toString(); int[] digits = new int[n1.length() + n2.length()]; for(int i = 0 ; i< n1.length(); i++){ for(int j = 0 ; j < n2.length(); j++){ digits[i+j] += (n1.charAt(i)- '0') * (n2.charAt(j)- '0'); } } StringBuilder sb = new StringBuilder(); for(int i = 0 ; i < digits.length ; i++){ int dig = digits[i] % 10; int carry = digits[i] / 10; if(i+1 < digits.length){ digits[i+1] += carry; } sb.insert(0,dig); } while(sb.charAt(0) == '0' && sb.length()>1){ sb.deleteCharAt(0); } return sb.toString(); } }
public class Solution { public String multiply(String num1, String num2) { // Start typing your Java solution below // DO NOT write main() function StringBuilder sb = new StringBuilder(); if(num1.length()==0||num2.length() ==0) return ""; ArrayList<Integer> list = new ArrayList<Integer>(); for(int i = 0 ; i < num1.length()+ num2.length(); i++){ list.set(i,0); } for(int i = 0 ; i < num1.length() ; i++){ for(int j = 0; j< num2.length() ; j++){ int value = list.get(i+j); list.set(i+j,value+(num1.charAt(num1.length()-i-1)- '0')*(num2.charAt(num2.length()-j-1)- '0'));//
// char "0"是有一个数值的
//"1"比“0”大1
} } int carry = 0; for(int i = 0 ; i < list.size(); i++){ int tmp = list.get(i) + carry; list.set(i, tmp%10); carry = tmp/10; } if(carry > 0) list.add(carry); int i = list.size()-1; for( ;i >0; i--){ if(list.get(i)!= 0){ break; } } while(i>=0){ sb.append(list.get(i--)); } return sb.toString(); } }