对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。
时间: 2024-03-13 15:42:29 浏览: 24
好的,我明白了。我会为你解答这个问题。以下是一个Java代码示例,实现了超长整数的加减法运算。
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String num1 = input.next();
String num2 = input.next();
String op = input.next();
String result = "";
if (op.equals("+")) {
result = add(num1, num2);
} else if (op.equals("-")) {
result = subtract(num1, num2);
}
System.out.println(result);
}
// 实现超长整数的加法运算
public static String add(String num1, String num2) {
StringBuilder sb = new StringBuilder();
int carry = 0;
int i = num1.length() - 1, j = num2.length() - 1;
while (i >= 0 || j >= 0 || carry != 0) {
int x = i >= 0 ? num1.charAt(i) - '0' : 0;
int y = j >= 0 ? num2.charAt(j) - '0' : 0;
int sum = x + y + carry;
sb.append(sum % 10);
carry = sum / 10;
i--;
j--;
}
return sb.reverse().toString();
}
// 实现超长整数的减法运算
public static String subtract(String num1, String num2) {
StringBuilder sb = new StringBuilder();
int borrow = 0;
int i = num1.length() - 1, j = num2.length() - 1;
while (i >= 0 || j >= 0) {
int x = i >= 0 ? num1.charAt(i) - '0' : 0;
int y = j >= 0 ? num2.charAt(j) - '0' : 0;
int diff = x - y - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
sb.append(diff);
i--;
j--;
}
// 去掉前导0
while (sb.length() > 1 && sb.charAt(sb.length() - 1) == '0') {
sb.deleteCharAt(sb.length() - 1);
}
if (borrow == 1) {
sb.append('-');
}
return sb.reverse().toString();
}
}
```
在这个示例中,我们使用了StringBuilder类来构建结果字符串,避免了频繁的字符串拼接操作。在加法运算中,我们从低位到高位依次计算每一位的和,并将结果保存在StringBuilder中。在减法运算中,我们也从低位到高位依次计算每一位的差,并将结果保存在StringBuilder中。需要注意的是,减法运算中的借位需要特殊处理。最后,我们还需要去掉结果字符串中的前导0,并在结果为负数时加上负号。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)