描述
两个长度超出常规整形变量上限的大数相减,请避免使用各语言内置大数处理库,如 Java.math.BigInteger 等。
输入
有 N 行测试数据,每一行有两个代表整数的字符串 a 和 b,长度超过百位。规定 a>=b,a, b > 0。 测试结果可以用 linux 小工具 bc
进行测试是否正确。
输出
返回表示结果整数的字符串。
输入样例
1231231237812739878951331231231237812739878951331231231237812739878951331231231237812739878951331231231237812739878951331231231237812739870-89513312312312378127398789513312312312378127398789513312312312378127398789513
1231231237812739878951331231231237812739878951331231231237812739878951331230000000000000000000000001-331231231237812739878951331231231
输出样例
1231231237812739878951331231231237812739878951331231231237812650365639018918853110413950365639018918853110413950365639018918853110413950357
1231231237812739878951331231231237812739878951331231231237812739878620099998762187260121048668768770
代码:
import java.util.*;
public class Main {
private static String padding(String str, int len) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < len; i++) {
stringBuilder.append("0");
}
stringBuilder.append(str);
return stringBuilder.toString();
}
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
String line;
while (scan.hasNextLine()) {
line = scan.nextLine().trim();
String[] subNumbsers = line.split("-");
int num1Len = subNumbsers[0].length();
int num2Len = subNumbsers[1].length();
subNumbsers[1] = padding(subNumbsers[1], num1Len - num2Len);
num2Len = subNumbsers[1].length();
int flag = 0;
StringBuilder stringBuilder = new StringBuilder();
Deque<String> stack = new ArrayDeque<>();
int num1 = 0;
int num2 = 0;
int res = 0;
for (int i = 0; i < num1Len; i++) {
num1 = subNumbsers[0].charAt(num1Len - 1 - i);
num2 = subNumbsers[1].charAt(num2Len - 1 - i);
if (flag == 1) {
num1 = num1 - 1;
}
res = num1 - num2;
if (res < 0) {
flag = 1;
res = res + 10;
} else {
flag = 0;
}
stack.push(String.valueOf(res));
}
while (stack.size() != 0) {
stringBuilder.append(stack.pop());
}
System.out.println(stringBuilder.toString());
// please write your code here
// System.out.println("answer");
}
}
}