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

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) であり、非常に効率的なアプローチです。

まとめ

本チュートリアルについて不明な点や質問がある場合は、コメント欄でお気軽にお知らせください。

  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

  2. 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