[伯俊-Java]基本数学1(#10757)


大数A+B
1行目に入力した2つの数字を加算する問題です.
「大数」なので、単純に+演算子で加算することはできません.
過去に学校の授業で経験したことがあるので、記憶を取り戻しました.(これはなぜ難易度が青銅なのか5…)
解決策はこうです.
  • は、1番目と2番目、および結果の配列を作成します.(アレイ長は数値の大きい値に基づく)
  • すべて
  • 0に初期化され、作業位置から並べ替えられます.
  • 桁を加算します.
  • さらに
  • を作り、アップロードがあればまたします.
  • import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String N = br.readLine();
            String[] big_str = N.split(" ");
            StringBuffer sb_1 = new StringBuffer(big_str[0]);
            StringBuffer sb_2 = new StringBuffer(big_str[1]);
            String fst_num = sb_1.reverse().toString();
            String sec_num = sb_2.reverse().toString();
            // 문자열을 받아서 거꾸로 저장(일의 자리부터 계산해야 하기 때문)
            
            int arr_len = (fst_num.length() > sec_num.length()) ? fst_num.length() : sec_num.length(); // 배열 길이를 정해줌
            int[][] int_arr = new int[3][arr_len];
    
            for(int i = 0; i < arr_len; i++){
                int_arr[0][i] = 0; // 첫번째 숫자
                int_arr[1][i] = 0; // 두번째 숫자
                int_arr[2][i] = 0; // 결과값
            } // 배열 초기화
            for(int i = 0; i < fst_num.length(); i++){
                int_arr[0][i] = fst_num.charAt(i)- 48;
            } 
            for(int i = 0; i < sec_num.length(); i++){
                int_arr[1][i] = sec_num.charAt(i)- 48;
            }
    
            int carry = 0;
            for(int i = 0; i < arr_len; i++){
                int sum = carry + int_arr[0][i] + int_arr[1][i];
                if(sum > 9) carry = 1; //캐리가 있으면 다음 자릿수에서 같이 더해줌
                else carry = 0;
                int_arr[2][i] = sum%10;
            }
            if(carry == 1) System.out.print(1); // 마지막 자릿수에 대한 캐리값
            for(int i = arr_len-1; i >= 0; i--){
                System.out.print(int_arr[2][i]);
            }
    
        }
    }
    
    文字列を逆さにしないようにしてみましたが、あまり良くなく、想像以上に時間がかかりました.