【Java】Xで割り切れる最大のK桁の数を求めるプログラムの書き方
以下は、指定した数Xで割り切れる最大のK桁の数を求めるJavaプログラムです。
サンプルコード
import java.io.*;
import java.lang.*;
public class Demo{
public static int largest_k(int val_1, int val_2){
int i = 10;
int MAX = (int)Math.pow(i, val_2) - 1;
return (MAX - (MAX % val_1));
}
public static void main(String[] args){
int val_1 = 25;
int val_2 = 2;
System.out.println("The largest 2 digit number divisible by 25 is ");
System.out.println((int)largest_k(val_1, val_2));
}
}
実行結果
The largest 2 digit number divisible by 25 is 75
プログラムの解説
このプログラムでは、Demoという名前のクラス内に、X(val_1)で割り切れる最大のK桁(val_2)の数を求めるための関数largest_kが定義されています。
処理の流れは以下の通りです。
手順1: 10のK乗から1を引いた値(10^K − 1)を計算し、変数MAXに代入します。これにより、K桁で表せる最大の数が求まります。
手順2: MAXをXで割った余り(MAX % val_1)をMAXから引きます。これにより、K桁の最大値の中でXで割り切れる最も大きい数が得られます。
手順3: 計算結果を呼び出し元に返します。
main関数では、Xに「25」、Kに「2」をそれぞれ設定しています。その後、largest_k関数を呼び出して計算を行い、その結果をコンソールに出力します。
この例の場合、2桁の最大値は99ですが、99を25で割ると余りが24になるため、99 − 24 = 75が答えとなります。実際、75は25 × 3であり、25で割り切れる最大の2桁の数です。
ポイントまとめ
・K桁の最大値は「10^K − 1」で求められる
・余りを引くことで、割り切れる最大の数に一発で到達できる
・ループ処理を使わないため、計算量はO(1)と非常に効率的
-
【Java】Luhnアルゴリズムでクレジットカード番号の有効性を検証するプログラム
クレジットカード番号の桁を含む長い数値が与えられたとき、その番号が有効かどうかをプログラムで判定する方法を解説します。クレジットカード番号の有効性を確認するには、以下の検証条件をすべて満たしている必要があります。クレジットカード番号の基本ルールクレジットカード番号は13桁〜16桁で構成され、カードブランドごとに決まった数字で始まります。Visaカード:すべて「4」から始まるMasterCard:すべて「5」から始まるAmerican Expressカード:「37」から始まるDiscoverカード:すべて「6」から始まる有効性チェックの手順(Luhnアルゴリズム)カード番号が有効かどうかは、以下
-
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)