原题链接:蓝桥杯基础练习VIP-高精度加法
解题思路:
注意事项:
参考代码:
package 练习;
import java.util.Scanner;
/*
* 输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。
算法描述
由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。
定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。
计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],
即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.
如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。依此类推,即可求出C的所有位。
最后将C输出即可
*/
public class Main {
public static void main(String[] args) {
int[] A = new int[100];
int[] B = new int[100];
Scanner sc = new Scanner(System.in);
String a = sc.nextLine();
String b = sc.nextLine();
String ar = reverse(a, a.length() - 1);
String br = reverse(b, b.length() - 1);
for (int i = 0; i < ar.length(); i++) {
A[i] = ar.charAt(i) - '0';
}
for (int i = 0; i < br.length(); i++) {
B[i] = br.charAt(i) - '0';
}
int maxlen = ar.length() > br.length() ? ar.length() : br.length();
StringBuffer C = new StringBuffer();
int r = (A[0] + B[0]) / 10;
C.append(String.valueOf((A[0] + B[0]) % 10));
for (int i = 1; i < maxlen; i++) {
if (A[i] + B[i] + r >= 10) {
C.append(String.valueOf((A[i] + B[i] + r) % 10));
r = (A[i] + B[i] + r) / 10;
continue;
}
if (A[i] + B[i] + r < 10) {
C.append(String.valueOf((A[i] + B[i] + r)));
r = (A[i] + B[i]) / 10;
}
}
if (A[maxlen - 1] + B[maxlen-1] + r >= 10)
C.append((A[maxlen - 1] + B[maxlen - 1] + r) / 10);
System.out.println(C.reverse());
}
static String reverse(String s, int begin) {
if (begin == 0) {
return s.charAt(0) + "";
}
return s.charAt(begin) + reverse(s, begin - 1);
}
}0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复