JAVA高精度加算(ブルーブリッジカップ練習)
問題の説明
2つの整数aとbを入力し、これら2つの整数の合計を出力します。aとbはどちらも100桁を超えません。
aとbはどちらも比較的大きいため、言語の標準データ型を使用して直接保存することはできません。この種の問題の場合、通常は配列を使用して対処します。
配列Aを定義します。A[0]はaの1の位を格納するために使用され、A [1]はaの10の位を格納するために使用されます。配列Bを使用してbを格納することもできます。
c = a + bを計算するときは、最初にA [0]とB [0]を加算します。キャリーがある場合は、キャリー(つまり、合計の10桁)をrに格納し、の1桁を格納します。合計C [0]を入力します。つまり、C [0]は(A [0] + B [0])%10に等しくなります。次に、A [1]とB [1]の加算を計算します。このとき、下位値rも加算する必要があります。つまり、C [1]はA [1]、B [の3つの数値になります。 1]とr的和。合計。別のキャリーが発生した場合でも、新しいキャリーはrに格納でき、合計の1桁はC [1]に格納できます。類推により、Cのすべてのビットを見つけることができます。
最後に、Cを出力します。
アイデアの分析この
トピックはアイデアを明確にしました。計算には配列を使用します。前の乗算と同様に、2つの数値と1の10が別々に処理され、キャリーが実行されます。
コードは以下のように表示されます
public class test13 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String n1 = sc.nextLine();
String n2 = sc.nextLine();
int[] a=new int[101];
int[] b=new int[101];
int[] result=new int[101];
for (int i = 0; i < a.length; i++) {
//初始化
result[0]=a[i]=b[i]=0;
}
for (int i = 0; i < n1.length(); i++) {
a[i]=n1.charAt(n1.length()-1-i)-48;
//charAt方法返回的是char类型,要转成int减去48即可;
}
for (int i = 0; i < n2.length(); i++) {
b[i]=n2.charAt(n2.length()-1-i)-48;
}
//计算
int ge=0,shi=0,count=0;
for (int i = 0; i < 101; i++) {
count=a[i]+b[i]+shi;//将两个个位相加
ge=count%10;//将得到的数各位和十位分开进行处理
shi=count/10;
result[i]=ge;//各位放入结果数组
}
int i;
for ( i = result.length-1; i >=0 ; i--) {
//倒着找到不为0的数字 然后输出
if (result[i]!=0) {
break;
}
}
for (int x = i; x >=0; x--) {
System.out.print(result[x]);
}
}
}