leetcode 43. Multiply Strings

    xiaoxiao2021-03-25  113

    leetcode 43. Multiply Strings

    字符串相乘  不简单啊。。。

    参考了 String 、StringBuffer、StringBuilder 之间的区别

    public class Solution { public static void main(String[] arg){ String a = "999"; String b = "999"; Solution s = new Solution(); String c = s.multiply(a,b); } public String multiply(String num1, String num2) { //StringBuffer res = new StringBuffer(); String res = ""; int l1 = num1.length(); int l2 = num2.length(); if(l1>l2){ for(int i=0;i<l2;i++){ StringBuffer k = multi(num1,num2.charAt(l2-1-i)); for(int j=0;j<i;j++){ k.append('0'); } res = add(res,k.toString()); } }else{ for(int i=0;i<l1;i++){ StringBuffer k = multi(num2,num1.charAt(l1-1-i)); for(int j=0;j<i;j++){ k.append('0'); } res = add(res,k.toString()); } } return res; } public StringBuffer multi(String a,char b){ StringBuffer res = new StringBuffer(); if(b=='0'){ res.append('0'); return res; } int al = a.length(); int re = 0; int bc = Character.getNumericValue(b); for(int i=0;i<al;i++){ int ac = Character.getNumericValue(a.charAt(al-1-i)); int mul = ac*bc+re; if(mul>=10){ re = mul/10; mul = mul; }else{ re = 0; } res.append(mul); } if(re>0) res.append(re); return res.reverse(); } public String add(String a,String b){ int al = a.length(); int bl = b.length(); int max = al>bl?al:bl; StringBuffer res = new StringBuffer(); int re = 0; int ac,bc; for(int i=0;i<max;i++){ if(i<al){ ac = Character.getNumericValue(a.charAt(al-1-i)); }else{ ac = 0; } if(i<bl){ bc = Character.getNumericValue(b.charAt(bl-1-i)); }else{ bc = 0; } int sum = ac + bc + re; if(sum>=10) { sum = sum - 10; re = 1; }else{ re = 0; } res.append(sum); } if(re==1) res.append(re); return res.reverse().toString(); } }

    转载请注明原文地址: https://ju.6miu.com/read-9227.html

    最新回复(0)