C++でxの倍数となる最大のk桁の数を求める方法
このチュートリアルでは、x で割り切れる最大の k 桁の数を求めるプログラムを C++ で実装する方法を解説します。
解き方の手順
この問題は、以下のシンプルな手順で解くことができます。
- 変数
x(割る数)とk(桁数)を初期化します。 pow(10, k) - 1を計算します。これは k 桁で表せる最大の数です(例:k = 3 なら 999)。- 上記の値から
xで割った余りを引きます。そうすることで、x で割り切れる最大の k 桁の数が求められます。
コード例
実際のコードを見てみましょう。
#include <bits/stdc++.h>
using namespace std;
int answer(int x, int k) {
int max = pow(10, k) - 1;
return max - (max % x);
}
int main() {
int x = 45, k = 7;
cout << answer(x, k) << endl;
return 0;
}
出力
上記のコードを実行すると、次の結果が得られます。
9999990
仕組みの解説
このアルゴリズムがなぜ正しく動作するのかを簡単に説明します。pow(10, k) - 1 は k 桁で表現できる最大の数です。この数から x で割った余り(max % x)を引くと、結果は必ず x の倍数になります。また、余りを引いているため元の数より小さくなり、かつ k 桁の範囲内に収まります。したがって、「x で割り切れる最大の k 桁の数」という条件を満たすことになります。
計算量は O(1) であり、非常に効率的なアプローチです。
まとめ
本チュートリアルについて不明な点や質問がある場合は、コメント欄でお気軽にお知らせください。
-
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
-
Xで割り切れる最小のK桁の数を求めるC++プログラム
この問題では、Xで割り切れる最小のK桁の数を求めます。まず、数式 10(k-1) を使ってK桁の最小の数を求め、その数がXで割り切れるかどうかを確認します。割り切れない場合は、次の数式を使って正確な答えを導き出します。(min + X) − ((min + X) mod X)具体例として、「29で割り切れる5桁の数」を求めてみましょう。5桁の最小の数は10000ですが、これは29で割り切れません。そこで上記の数式を適用すると、次のようになります。(10000 + 29) − ((10000 + 29) mod 29) = 10029 − 24 = 10005求められた数10005は、実際に29