Java
 Computer >> コンピューター >  >> プログラミング >> Java

Xで割り切れる最小のK桁の数を求めるJavaプログラム

本記事では、指定された数値Xで割り切れる最小のK桁の数を求めるJavaプログラムを紹介します。この問題は、K桁の最小値(例えば3桁なら100)から出発し、Xの倍数になるまで調整するというシンプルな考え方で解くことができます。

コード例

import java.io.*;
import java.lang.*;
public class Demo{
    public static double smallest_k(double x_val, double k_val){
        double val = 10;
        double MIN = Math.pow(val, k_val - 1);
        if (MIN % x_val == 0)
            return (MIN);
        else
            return ((MIN + x_val) - ((MIN + x_val) % x_val));
    }
    public static void main(String[] args){
        double x_val = 76;
        double k_val = 3;
        System.out.println("The smallest k digit number divisible by x is ");
        System.out.println((int)smallest_k(x_val, k_val));
    }
}

実行結果

The smallest k digit number divisible by x is
152

プログラムの解説

まず、Demoという名前のクラスを定義し、その中にsmallest_kという関数を作成しています。この関数は、引数として受け取った数値xで割り切れる、k桁の最小の数を返します。

処理の流れは以下の通りです。

1. Math.pow(10, k_val - 1) を使って、k桁の数の最小値(MIN)を計算します。例えば3桁の場合は10の2乗である「100」が最小値となります。

2. もしMINがすでにxで割り切れる場合(MIN % x_val == 0)、そのままMINを返します。

3. 割り切れない場合は、(MIN + x_val) - ((MIN + x_val) % x_val) という計算式によって、MIN以上でxの倍数となる最も小さい数を求めて返します。これは、余りを差し引くことで最寄りの倍数へ切り下げるテクニックです。

mainメソッドの動作

mainメソッドでは、x_val = 76k_val = 3 という値を設定しています。つまり、「76で割り切れる最小の3桁の数」を求めることになります。3桁の最小値は100ですが、100は76で割り切れないため、76の倍数の中で100以上の最小の数、すなわち 152(76 × 2) が出力されます。

このように、剰余演算(%)を活用することで、ループを使わずに効率的に答えを導き出せる点が、このアルゴリズムのポイントです。

  1. 【Java】素数を判定して次の素数を見つけるプログラムの作り方

    素数とは? 素数とは、1より大きい整数のうち、約数が「1」と「その数自身」の2つだけを持つ数のことです。それ以外の正の約数は一切持ちません。たとえば7は「7 = 1 × 7」としか分解できないため、素数です。 素数判定のアルゴリズム ある数が素数かどうかを調べるには、以下の手順が基本になります。 判定対象の整数を変数Aに代入する。 Aを2からA−1までの整数で順番に割っていく。 途中で一度でも割り切れたら、Aは素数ではない。 最後まで割り切れる数が現れなければ、Aは素数である。 なお、実際のプログラムでは「√Aまで調べれば十分」という性質を利用すると処理を大幅に高速化できます。これは、A

  2. Xで割り切れる最小のK桁の数を求めるPythonプログラム

    この記事では、「指定した整数Xで割り切れる最小のK桁の数」を求める問題の解き方とアプローチについて詳しく解説します。問題文2つの整数 K(桁数)と X(割る数)が与えられます。Xで割り切れる最小のK桁の整数を求めてください。アプローチこの問題は、以下のシンプルな手順で解くことができます。まず、K桁の数のうち最小の値 MIN を求めます。MIN は「1の後に0が(K−1)個並ぶ数」、すなわち 10K−1 です(例:K=5なら 10000)。もし MIN を X で割った余りが 0 であれば、MIN がそのまま答えになります。そうでない場合は、答えは (MIN + X) − ((MIN + X)