java字符串做加减_Java计算长整数加减(字符串表示)
时间: 2023-08-12 09:04:01 浏览: 88
可以使用字符串来表示长整数,然后进行加减运算。具体步骤如下:
1. 将两个字符串表示的长整数补齐到相同长度,即在较短的字符串前面加 0,使得两个字符串的长度相等。
2. 从字符串的末尾开始,逐位相加,同时考虑上一位的进位。如果某一位相加的结果大于等于 10,则需要进位。
3. 将相加的结果逆序输出,得到最终的结果。
下面是 Java 代码实现:
```java
public static String add(String s1, String s2) {
// 将两个字符串表示的长整数补齐到相同长度
int len = Math.max(s1.length(), s2.length());
s1 = leftPad(s1, len);
s2 = leftPad(s2, len);
StringBuilder sb = new StringBuilder();
int carry = 0; // 进位
for (int i = len - 1; i >= 0; i--) {
int sum = carry + s1.charAt(i) - '0' + s2.charAt(i) - '0'; // 逐位相加
sb.append(sum % 10); // 计算当前位的值
carry = sum / 10; // 计算进位
}
if (carry != 0) {
sb.append(carry); // 如果最高位有进位,需要补上
}
return sb.reverse().toString(); // 将相加的结果逆序输出
}
public static String subtract(String s1, String s2) {
// 将两个字符串表示的长整数补齐到相同长度
int len = Math.max(s1.length(), s2.length());
s1 = leftPad(s1, len);
s2 = leftPad(s2, len);
StringBuilder sb = new StringBuilder();
int borrow = 0; // 借位
for (int i = len - 1; i >= 0; i--) {
int diff = s1.charAt(i) - borrow - s2.charAt(i); // 逐位相减
if (diff < 0) { // 需要借位
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
sb.append(diff); // 计算当前位的值
}
while (sb.charAt(sb.length() - 1) == '0' && sb.length() > 1) {
sb.deleteCharAt(sb.length() - 1); // 去掉结果中的前导 0
}
return sb.reverse().toString(); // 将相减的结果逆序输出
}
private static String leftPad(String s, int len) {
StringBuilder sb = new StringBuilder(s);
while (sb.length() < len) {
sb.insert(0, '0'); // 在字符串前面补 0
}
return sb.toString();
}
```
这里使用了 StringBuilder 类来保存中间结果,leftPad 方法用于在字符串前面补 0,subtract 方法中还需要去掉结果中的前导 0。
阅读全文