大数相减
和大数相加差不多,需要注意两点:
- 先要注意判断,大数减小数正常相减,小数减大数相当于大数减小数前添加个负号
- 也是从后向前相减,个位开始相减,相减时先加个 10
- 最后注意去掉结果开头的 0
public class Huawei {
public static void main(String[] args) {
String num1 = "2000";
String num2 = "1001";
System.out.println(func(num1, num2));
}
private static String func(String num1, String num2) {
char[] c1 = num1.toCharArray();
char[] c2 = num2.toCharArray();
int len1 = c1.length;
int len2 = c2.length;
if (len1 > len2) {
return sub(c1, c2);
}
else if (len1 < len2) {
return "-" + sub(c2, c1);
}
else {
int compare = num1.compareTo(num2);
if (compare == 0) {
return "0";
}
else if (compare > 0) {
return sub(c1, c2);
}
else {
return "-" + sub(c2, c1);
}
}
}
private static String sub(char[] c1, char[] c2) {
StringBuilder res = new StringBuilder();
int len1 = c1.length;
int len2 = c2.length;
// 借位
int carry = 0;
for (int i = len1 - 1, j = len2 - 1; i >= 0 || j >= 0; i --, j --) {
int a = (i >= 0 ? c1[i] - '0' : 0) + carry;
int b = j >= 0 ? c2[j] - '0' : 0;
int temp = 0;
if (a < b) {
// 借位
carry = -1;
temp = a + 10 - b;
}
else {
carry = 0;
temp = a - b;
}
res.append(temp);
}
// 去掉开头的 0
if (res.charAt(res.length() - 1) == '0') {
res.deleteCharAt(res.length() - 1);
}
return res.reverse().toString();
}
}
🎁 公众号

各位小伙伴大家好呀,叫我小牛肉就行,目前在读东南大学硕士,上方扫码关注公众号「飞天小牛肉」,与你分享我的成长历程与技术感悟~
帮助小牛肉改善此页面 (opens new window)
Last Updated: 2023/02/16, 11:27:10