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");
}
}