题目
- 牛客链接:高精度整数加法
- 题目描述
输入两个用字符串表示的整数,求它们所表示的数之和。
字符串的长度不超过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);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix