class="java"> /**
* 默认最大长度50位,可以调节,或者动态判断都行
*/
static String[] all = new String[50];
public static void main(String[] args) {
System.out.println(multiply(Long.MAX_VALUE, Long.MAX_VALUE));
System.out.println(multiply1(Long.MAX_VALUE, Long.MAX_VALUE));
}
private static String multiply1(Long a, Long b) {
char[] as = a.toString().toCharArray();
char[] bs = b.toString().toCharArray();
for (int p1=0,i = as.length-1; i > -1; i--,p1++) {
for (int p2=p1,j = bs.length-1; j > -1; j--,p2++) {
Integer num = Integer.parseInt(bs[j]+"") * Integer.parseInt(as[i]+"");
int pos = p2;
addNum(num % 10, pos);
if (num > 10) {
addNum(num / 10, pos+1);
}
}
}
for(int x = all.length -1 ;x > -1;x--){
if(all[x] != null){
System.out.print(all[x]);
}
}
return "";
}
private static void addNum(int num, int i) {
if (all[i] == null) {
all[i] = "0";
}
Integer s1 = Integer.parseInt(all[i]);
s1 = s1 + num;
if (s1 >= 10) {
all[i] = String.valueOf(s1 - 10);
addNum(s1 / 10, i + 1);
} else {
all[i] = String.valueOf(s1);
}
}
/**
* JDK 提供,可以看看优化
* @param x
* @param y
* @return
*/
private static String multiply(long x, long y) {
BigDecimal a = new BigDecimal(x);
BigDecimal b = new BigDecimal(y);
return a.multiply(b).toString();
}
?