## JAVA高精度加算(ブルーブリッジカップ練習)

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]);
		}
	}
}

おすすめ

転載: blog.csdn.net/qq_45657198/article/details/113824169