package leetcode; public class demo_43 { public String multiply(String num1, String num2) { String s1=""; String s=""; if(num2.equals("0")||num1.equals("0")) {return s="0";} //记录当前记录的次数 int n=0; for(int i=num2.length()-1;i>=0;i--) { s1=Singlemul(num1, num2.charAt(i)); s=addnumber(s, s1,n); n=n+1; } //之前的操作都是从左往右运算,现在要翻转过来 StringBuffer sb=new StringBuffer(s); sb.reverse(); s=sb.toString(); System.out.println(s); return s; } //一位数字乘以多位数 public String Singlemul(String num,Character c) { String s=""; int add=0; int mul; for(int i=num.length()-1;i>=0;i--) { mul=(Integer.valueOf(c)-48)*(Integer.valueOf(num.charAt(i))-48)+add; if(mul>=10) { add=mul/10; } else { add=0; } s=s+mul%10; } if(add!=0) { s=s+add; } return s; } //将两个多位数进行相加 public String addnumber(String s1,String s2,int n) { String s=""; int add=0; for(int i=0;i<n;i++) { s=s+s1.charAt(i); } int num; int i; int j; //当进行n次相加时,加数起始位置是在被加数的第n位 for(i=n,j=0;i<s1.length()&&j<s2.length();i++,j++) { num=(Integer.valueOf(s1.charAt(i))-48)+(Integer.valueOf(s2.charAt(j))-48)+add; if(num>=10) { add=num/10; } else { add=0; } s=s+num%10; } for(;j<s2.length();j++) { num=(Integer.valueOf(s2.charAt(j))-48)+add; if(num>=10) { add=num/10; } else { add=0; } s=s+num%10; } if(add==1) { s=s+1; } return s; } public static void main(String[] args) { // TODO Auto-generated method stub demo_43 d43 =new demo_43(); d43.multiply("123", "456"); } }
原文:https://www.cnblogs.com/Yshun/p/14723491.html