[伯俊-Java]基本数学1(#10757)
2002 ワード
大数A+B
1行目に入力した2つの数字を加算する問題です.
「大数」なので、単純に+演算子で加算することはできません.
過去に学校の授業で経験したことがあるので、記憶を取り戻しました.(これはなぜ難易度が青銅なのか5…)
解決策はこうです.は、1番目と2番目、および結果の配列を作成します.(アレイ長は数値の大きい値に基づく) すべて0に初期化され、作業位置から並べ替えられます. 桁を加算します. さらにを作り、アップロードがあればまたします.
1行目に入力した2つの数字を加算する問題です.
「大数」なので、単純に+演算子で加算することはできません.
過去に学校の授業で経験したことがあるので、記憶を取り戻しました.(これはなぜ難易度が青銅なのか5…)
解決策はこうです.
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]);
}
}
}
文字列を逆さにしないようにしてみましたが、あまり良くなく、想像以上に時間がかかりました.Reference
この問題について([伯俊-Java]基本数学1(#10757)), 我々は、より多くの情報をここで見つけました https://velog.io/@win6801/백준-Java-기본수학-110757テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol