ブルーブリッジカップ--高精度加算
1966 ワード
問題の説明
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を出力すればよい.
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);
}
}