一块蒸蛋糕


私信TA

用户名:736015747

访问量:991

签 名:

等  级
排  名 7492
经  验 1308
参赛次数 0
文章发表 10
年  龄 0
在职情况 学生
学  校 东南大学
专  业 扫地

  自我简介:

TA的其他文章


解题思路:

注意事项:

参考代码:

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 人评分

  评论区

  • «
  • »