【C++】N以下でK割り切れる最大の数を求める方法
はじめに
このチュートリアルでは、C++を使って「N以下の整数の中で、Kで割り切れる最大の数」を求めるプログラムを作成します。剰余演算子(%)を活用することで、わずか数行のコードで効率よく解くことができる問題です。
解き方の手順
- 整数 n と k を初期化します。
- 剰余演算子(
%)を使って、n を k で割った余りを求めます。 - 余りが 0 の場合、n はすでに k で割り切れているため、そのまま n を返します。
- 余りが 0 以外の場合は、n から余りを引いた値(n − 余り)を返します。
サンプルコード
それでは、実際のコードを見てみましょう。
#include <bits/stdc++.h>
using namespace std;
int findLargestNumber(int n, int k) {
int remainder = n % k;
if (remainder == 0) {
return n;
}
return n - remainder;
}
int main() {
int n = 33, k = 5;
cout << findLargestNumber(n, k) << endl;
return 0;
}
実行結果
上記のコードを実行すると、次の出力が得られます。
30
コードの解説
この例では、n = 33、k = 5 としています。33 を 5 で割ると余りは 3 になるため、「33 − 3 = 30」が返されます。実際に 30 は 5 で割り切れ、33 以下の条件を満たす最大の数となっています。
このアルゴリズムの計算量は O(1) であり、剰余計算を一度行うだけで答えが求まるため、非常に効率的です。ループで一つずつ数を確認する必要はありません。
まとめ
剰余演算子を使えば、N以下でK割り切れる最大の数を簡単に求められることを学びました。本チュートリアルについて質問がある場合は、ぜひコメント欄でお知らせください。
-
Xで割り切れる最大のK桁の数を求めるC++プログラム
2つの整数 X と K が与えられます。ここで K は桁数を表します。この問題の目的は、Xで割り切れる最大のK桁の数を見つけることです。入力:X = 30, K = 3 出力:980考え方出力例の 980 は、30で割り切れる最大の3桁の数です。この問題は次の手順で解くことができます。まず、10 の K 乗から 1 を引くことで、K桁の数の最大値(MAX)を求めます。例:K = 3 の場合、10³ − 1 = 999次に、MAX を X で割った余り(MAX % X)を MAX から引きます。これにより、Xで割り切れる最大のK桁の数が得られます。余りを引くという操作により、MAX 以下でかつ
-
Xで割り切れる最大のK桁の数を求めるC++プログラム
この記事では、「Xで割り切れる最大のK桁の整数」を求める問題をC++で解く方法を解説します。一見すると複雑そうに思えますが、実は非常にシンプルな数式だけで答えを導き出せる、アルゴリズム学習に最適な題材です。解法の基本的な考え方K桁の最大の整数は、次の公式で簡単に求められます。max = 10^k − 1例えば5桁なら「99999」、6桁なら「999999」となります。この最大値がそのままXで割り切れれば、それが答えです。もし割り切れない場合は、次の式を使うことで、Xで割り切れる最大のK桁の数を一発で計算できます。max − (max mod X)具体例:5桁かつ29の倍数となる最大の数まず、5