原题链接:蓝桥杯基础练习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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复