大数加法
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
(字符串长度不大于100000,保证字符串仅由’0’~'9’这10种字符组成)
public String solve_add(String s, String t) {
int len1 = s.length();
int len2 = t.length();
int i = len1 - 1;
int j = len2 - 1;
int x = 0;
int y = 0;
int m = 0;//商
int n = 0;//余数
StringBuilder sb = new StringBuilder();
while (i >= 0 || j >= 0) {
if (i >= 0) {
x = s.charAt(i) - '0';
} else {
x = 0;
}
if (j >= 0) {
y = t.charAt(j) - '0';
} else {
y = 0;
}
int sum = x + y + m;
m = sum / 10;
n = sum % 10;
sb.append(n);
i--;
j--;
}
if (m > 0) {
sb.append(m);
}
sb.reverse();
return sb.toString();
}
大数乘法
以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。
(字符串长度不大于10000,保证字符串仅由’0’~'9’这10种字符组成)
public String solve_multiply(String s, String t) {
int len1 = s.length();
int len2 = t.length();
int x = 0;
int y = 0;
String[] array = new String[len2];
//按照乘数,每一位计算一次,进位则乘10,并放入数组
for (int k = len2 - 1; k >= 0; k--) {
int m = 0;//商
int n = 0;//余数
int i = len1 - 1;
StringBuilder sb = new StringBuilder();
while (i >= 0) {
if (i >= 0) {
x = s.charAt(i) - '0';
}
if (k >= 0) {
y = t.charAt(k) - '0';
}
int sum = x * y + m;
m = sum / 10;
n = sum % 10;
sb.append(n);
i--;
}
if (m > 0) {
sb.append(m);
}
sb.reverse();
for (int p = 0; p < len2 - 1 - k; p++) {
sb.append("0");
}
array[k] = sb.toString();
}
//最后调用大数加法函数,将数组中所有的值相加
String sum = "0";
for (int kk = 0; kk < len2; kk++) {
sum = solve_add(array[kk], sum);
}
return sum;
}