1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
public class IntStringMath {
/**
* Compute num1 + num2, when num1 and num2 are given as Strings
* @param num1
* @param num2
* @return
*/
public static String add(String num1, String num2) {
if (num1.startsWith("-") && num2.startsWith("-")) {
return "-" + add(num1.substring(1), num2.substring(1));
} else if (num1.startsWith("-")) {
return subtract(num2, num1.substring(1));
} else if (num2.startsWith("-")) {
return subtract(num1, num2.substring(1));
}
String result = "";
int carry = 0;
for (int i = num1.length() - 1; i >= 0; i --) {
int dig = Integer.parseInt(String.valueOf(num1.charAt(i))) + Integer.parseInt(String.valueOf(num2.charAt(i))) + carry;
carry = dig / 10;
dig %= 10;
result = dig + result;
}
if (carry != 0) {
result = carry + result;
}
return result;
}
/**
* Compute num1 - num2, when num1 and num2 are given as Strings
* @param num1
* @param num2
* @return
*/
public static String subtract(String num1, String num2) {
if (num1.startsWith("-") && num2.startsWith("-")) {
return subtract(num2.substring(1), num1);
} else if (num1.startsWith("-")) {
return add(num1, num2);
} else if (num2.startsWith("-")) {
return add(num1, num2);
}
String result = "";
int borrow = 0;
for (int i = num1.length() - 1; i >= 0; i --) {
int dig = Integer.parseInt(String.valueOf(num1.charAt(i))) - Integer.parseInt(String.valueOf(num2.charAt(i))) + borrow;
if (dig < 0) {
borrow = -1;
} else {
borrow = 0;
}
dig *= borrow;
result = dig + result;
}
if (borrow != 0) {
result += "-" + result;
}
return result;
}
}