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

C++でaのb乗(a^b)の右からk桁目の数字を求める方法

はじめに

このチュートリアルでは、C++を使って ab(aのb乗)の右側から数えてk番目の桁の数字を求めるプログラムを作成します。

これは非常にシンプルな問題です。解決までの手順を順番に見ていきましょう。

解決の手順

  • 数値a、b、kを初期化します。
  • pow関数を使用して ab の値を計算します。
  • 累乗値が0より大きく、かつカウントがk未満である間、ループ処理を行います。
    • 累乗値の1の位(最後の桁)を取得します。
    • カウンターを1つ増やします。
    • kとカウンターが等しいかどうかを判定します。
    • 等しい場合は、その桁の数字を返します。
  • 条件を満たさなかった場合は-1を返します。

コード例

それでは、実際のコードを見てみましょう。

#include <bits/stdc++.h>
using namespace std;
int getTheDigit(int a, int b, int k) {
    int power = pow(a, b);
    int count = 0;
    while (power > 0 && count < k) {
        int rem = power % 10;
        count++;
        if (count == k) {
            return rem;
        }
        power /= 10;
    }
    return -1;
}
int main() {
    int a = 5, b = 6;
    int k = 3;
    cout << getTheDigit(a, b, k) << endl;
    return 0;
}

出力結果

上記のコードを実行すると、次の結果が表示されます。

6

処理の流れを確認

この例では、56 = 15625 が計算され、右から3番目の桁である「6」が出力されます。剰余演算(%)で1の位を取り出し、10で除算することで桁を一つずつ右へずらしていく仕組みです。

注意点

pow関数はdouble型の値を返すため、abの結果が非常に大きくなると、浮動小数点数の精度の問題が発生する可能性があります。大きな数値を扱う場合は、モジュロ演算を活用した繰り返し二乗法や、多倍長整数ライブラリの使用を検討するとよいでしょう。

まとめ

このチュートリアルでは、C++で累乗値 ab の右からk番目の桁を求める方法を解説しました。剰余演算(%)と除算(/)を組み合わせることで、各桁の数字を簡単に取り出せることを学びました。チュートリアルについてご不明な点がある場合は、コメント欄でお気軽にお知らせください。

  1. C++で a^b に最も近い x の倍数を求める方法

    3つの値 a、b、x が与えられたとき、ab に最も近い x の倍数を求める問題を考えてみましょう。例えば、x = 4、a = 3、b = 3 の場合、33 = 27 に最も近い x の倍数は 28 となるため、出力は 28 になります。解法のアプローチ考え方はシンプルで、以下の条件に従って処理を分岐させます。b < 0 かつ a = 1 の場合: ab は 1 になるため、x に最も近い倍数は 0 または x となります。b < 0 かつ a > 1 の場合: ab は 1 より小さくなるため、x に最も近い倍数は 0 となります。b > 0 の場合: まず ab を

  2. C++のstatic_castとは?基本からエラー例まで解説

    static_castとはstatic_castは、C++における通常の型変換(キャスト)を行うための演算子です。暗黙的な型変換を担う役割もあり、明示的に記述して呼び出すこともできます。例えば、floatからintへの変換、charからintへの変換などが代表的な使用例です。また、継承関係にあるクラス同士(基底クラスと派生クラス)のポインタ変換にも利用できます。C言語風のキャスト((int)x のような書き方)と比べると、static_castは意図が明確になり、コンパイラによる型チェックも働くため、より安全で可読性の高いコードになります。基本的な使用例以下は、float型の値をint型に変換