解题思路:

注意事项:

参考代码:

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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论