ブルーブリッジカップ--高精度加算


問題の説明
2つの整数を入力
a和
b,この2つの整数の和を出力する.
a和
bは100位を超えない.
アルゴリズムの説明
によって
a和
bはいずれも大きいため、言語の標準データ型を直接使用して記憶することはできない.この問題については,一般に配列を用いて処理される.
配列の定義
A,
A[0]記憶用
aのビット、
A[1]記憶用
aの10位は、このように推す.同じ配列で
Bは記憶する
b.
計算#ケイサン#
c = 
a + 
bの場合、まず
A[0]と
B[0]を加算し、キャリーが発生した場合、キャリー(和の10桁)を格納する
r,和の桁数を格納する
C[0]、すなわち
C[0]は(
A[0]+
B[0])%10.そして計算
A[1]と
B[1]を加算した場合、下位の値を上げる
rも加算すると、すなわち
C[1]は
A[1]、
B[1]と
r 3つの数の和.またキャリーが発生した場合でも、新しいキャリーを
rにおいて、和のビットは
C[1]では.このように推すと,すぐに求めることができる
Cのすべてのビット.
最後にCを出力すればよい.
package com.xjj.lanqiao;

import java.util.Scanner;

/*----     --   
 * 
 * */
public class Lq2_29 {
	//    --   
	class bign{
		int[] num = new int[200];
		int len = 0;
	}

	bign a = new bign();
	bign b = new bign();
	
	//     
	public void add(bign a, bign b){
		bign c = new bign();			//  
		int carry = 0;					//  
		
		//      ,     
		for(int i = 0; i < a.len || i < b.len; i++){
			//           
			int temp = a.num[i] + b.num[i] + carry;
			c.num[c.len++] = temp % 10;		//     
			carry = temp / 10;				//     ,     
		}
		//     
		if (carry != 0) 
			c.num[c.len++] = carry;
		
		//       
		for(int i = c.len - 1; i >= 0; i--){
			System.out.print(c.num[i]);
		}
	}
	public static void main(String[] args) {
		System.out.println();
		Scanner scanner = new Scanner(System.in);
		Lq2_29 lq = new Lq2_29();
		
		String str1 = scanner.nextLine();
		String str2 = scanner.nextLine();
		//        
		char[] csa = str1.toCharArray();
		char[] csb = str2.toCharArray();
		int lena = csa.length;
		int lenb = csb.length;
		// char[]      int[]
		//              ,  i     len-1   
		for(int i = lena - 1; i >= 0; i--){
			lq.a.num[lq.a.len++] = csa[i] - '0';
		}
		for(int i = lenb - 1; i >= 0; i--)
			lq.b.num[lq.b.len++] = csb[i] - '0';

		lq.add(lq.a, lq.b);
	}

}