BOJ 231分解(Java)


質問する


BOJ 231分解

に答える


Brootforsで解いた
1からN(入力された数)の間の文のi+iの各ビット数の和がNである場合、iが出力される.
iの各ビット数を増やす2つの方法を考えた.

  • iが0になるまでiを10で割った残数を求め、10で割った.
    次のコードで作成されました.

  • iを文字列に変換し、各位置の文字を加算した値を求めます.
  • for (int j = 0; j < String.valueof(i).length(); j++) {
      sum += Integer.parseInt(String.valueof(i).charAt(j));
    }
    int->String->int変換は複雑で性能が悪いため,方法1を用いて解く.
    △Nが非常に大きい場合、この方法は適用を考慮する.

    コード#コード#

    import java.io.*;
    import java.util.*;
    
    public class Q2231 {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
            final int N = Integer.parseInt(br.readLine());
            final int answer = getDecompositionNumber(N);
    
            bw.write(answer + "\n");
            bw.close();
            br.close();
        }
    
        static int getDecompositionNumber(int N) {
            for (int i = 1; i < N; i++) {
                int number = i;
                int sum = 0;
    
                while (number != 0) {
                    sum += number % 10;
                    number /= 10;
                }
    
                if (sum + i == N) {
                    return i;
                }
            }
            return 0;
        }
    }

    結果


    メソッド1とメソッド2の結果は次のとおりです.