题目
- 牛客链接:高精度整数加法
- 题目描述
输入两个用字符串表示的整数,求它们所表示的数之和。
字符串的长度不超过10000。
本题含有多组样例输入。
- 输入
9876543210
1234567890
- 输出
11111111100
基本思路
题目不难,就是比较难处理。字符串类型的题目貌似都比较繁琐!
- 找出最长的字符串
num; - 将输入的两个字符串字符串
num1和num2的数组逐个添加到数组后续进行相加; - 处理最长的字符串在没有遍历玩的情况下;
- 处理溢出的数字;
- 遍历输出。
代码展示
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String num1 = scanner.next();
String num2 = scanner.next();
// 1. 找出最长的字符串
if (num1.length() < num2.length()) {
String tmp = num1;
num1 = num2;
num2 = tmp;
}
int len1 = num1.length();
int len2 = num2.length();
int len = len1+1;
int[] nums1 = new int[len1];
int[] nums2 = new int[len2];
int[] nums = new int[len];
// 2. 将字符串添加到数组
for (int i = 0; i < len1; i++) {
nums1[i] = num1.charAt(i) - '0';
}
for (int i = 0; i < len2; i++) {
nums2[i] = num2.charAt(i) - '0';
}
int i = len1-1;
int j = len2-1;
int k = len-1;
int add = 0;
// 相加
while (i >= 0 && j >= 0) {
if (nums1[i] + nums2[j] + add > 9) {
nums[k] = (nums1[i] + nums2[j] + add) % 10;
add = (nums1[i] + nums2[j] + add) / 10;
}else {
nums[k] = nums1[i] + nums2[j] + add;
add = 0;
}
i--;
j--;
k--;
}
// 3. 处理最长的字符串
while (i >= 0) {
if (nums1[i] + add > 9) {
nums[k] = (nums1[i] + add) % 10;
add = (nums1[i] + add) / 10;
}else {
nums[k] = nums1[i] + add;
add = 0;
}
i--;
k--;
}
// 4. 处理溢出
if (add != 0) {
nums[k] = add;
}
// 5. 遍历输出
String res = "";
int index = 0;
if (nums[0] == 0) {
index = 1;
}
for (; index < len; index++) {
res += nums[index];
}
System.out.println(res);
}
}
浙公网安备 33010602011771号