import java.util.ArrayList;
import java.util.List;
public class BigIntegerMulti {
public static void main(String[] args) {
String str1 = "1242334455949486667889999877766666";
String str2 = "23333333333333334545343424845343434";
String result = multi(str1, str2);
System.out.println(result);
}
public static String multi(String str1, String str2) {
List<Integer> list1 = new ArrayList<Integer>();
List<Integer> list2 = new ArrayList<Integer>();
Integer len1 = str1.length();
Integer len2 = str2.length();
for (int i = 0; i < len1; i++) {
list1.add(Integer.valueOf(str1.substring(i, i + 1)));
}
for (int j = 0; j < len2; j++) {
list2.add(Integer.valueOf(str2.substring(j, j + 1)));
}
List<Integer> result = new ArrayList<Integer>();
int append = 0;
for (int i = len1 - 1; i >= 0; i--) {
List<Integer> oneList = multiOne(list2, list1.get(i));
if (result.isEmpty()) {
result.addAll(oneList);
} else {
for (int a = 0; a < append; a++) {
oneList.add(0, 0);
}
result = add(result, oneList);
}
append++;
}
String resultStr = "";
for (int i = result.size() - 1; i >= 0; i--) {
resultStr = resultStr + result.get(i);
}
return resultStr;
}
public static List<Integer> multiOne(List<Integer> list, Integer num) {
List<Integer> result = new ArrayList<Integer>();
result.add(0);
Integer ge = 0;
Integer shi = 0;
Integer len = list.size();
for (int i = len - 1; i >= 0; i--) {
Integer data = list.get(i);
Integer tmp = num * data;
ge = tmp % 10;
shi = tmp / 10;
Integer last = result.get(len - 1 - i);
result.set(len - 1 - i, ge + last);
result.add(shi);
}
if (0 == result.get(result.size() - 1)) {
result.remove(result.size() - 1);
}
return result;
}
public static List<Integer> add(List<Integer> list1, List<Integer> list2) {
List<Integer> result = new ArrayList<Integer>();
Integer len1 = list1.size();
Integer len2 = list2.size();
Integer len = len1;
if (len2 > len) {
len = len2;
}
result.add(0);
for (int i = 0; i < len; i++) {
int data1 = 0;
if (i < len1) {
data1 = list1.get(i);
}
int data2 = 0;
if (i < len2) {
data2 = list2.get(i);
}
int last = result.get(i);
int tmp = data1 + data2 + last;
int ge = tmp % 10;
int shi = tmp / 10;
result.set(i, ge);
result.add(shi);
}
if (0 == result.get(result.size() - 1)) {
result.remove(result.size() - 1);
}
return result;
}
}
大数相乘,直接上手写大数相乘,感觉有些难以入手,思绪混乱。将问题转换了一下成两个问题:1、个位数 * 大数 ;2、大数相加;