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

C++で2のn乗の桁数を求める方法

数のべき乗は、繰り返し掛け算を行うか、プログラミング言語が提供している関数を使用することで簡単に計算できます。

この記事では、2のn乗を求め、その結果が何桁になるのかを計算する方法を解説します。まずは具体例を見てみましょう。

入力

5

出力

2

上記の例では、25 = 32 となるため、桁数は「2」です。

入力

10

出力

4

こちらの例では、210 = 1024 となるため、桁数は「4」になります。

アルゴリズム

  • 整数 n を初期化します。
  • 2n の値を求めます。
  • log10 の値を切り上げ(ceil)ると、その数の桁数が得られます。
  • 桁数を求めて返します。

なぜ log10 で桁数が分かるのかというと、10進数において、ある数 x の常用対数 log10(x) を切り上げた値がその数の桁数と一致するためです。例えば log10(100) = 2 なので、100 は3桁の数だと分かります。この性質を利用すれば、巨大な数を実際に表示せずとも桁数だけを効率よく求められます。

実装

以下は、上記のアルゴリズムをC++で実装したコードです。

#include <bits/stdc++.h>
using namespace std;
int getDigitsCount(int n) {
    return ceil(log10(pow(2, n)));
}
int main() {
    int n = 8;
    cout << getDigitsCount(n) << endl;
    return 0;
}

出力

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

3

n = 8 の場合、28 = 256 となるため、桁数は「3」と正しく出力されます。このように、pow 関数と log10 を組み合わせることで、べき乗の桁数をわずか数行のコードで求めることができます。

  1. C++で数値がx^y(累乗)として表現できるかどうかを判定する方法

    この記事では、ある数値が xy のような累乗の形で表現できるかどうかを判定する方法を解説します。例えば、125 という数値は 53 と表現できます。一方、91 のような数値は、いかなる整数の累乗としても表現できません。アルゴリズムの考え方判定の基本的なアイデアは次のとおりです。底となる候補 i を 2 から順に試し、log(num) / log(i) を計算します。この結果がほぼ整数になれば、num は i の累乗として表せることになります。isRepresentPower(num): Begin if num = 1, then return true for i := 2,

  2. C++で数値の累乗を計算する方法:再帰・非再帰プログラムの実装例

    数の累乗とは数の累乗は x^y の形式で表され、x は基数(底)、y は指数を表します。例を見てみましょう。x = 2、y = 10 の場合 x^y = 1024 ここで、x^y は 2^10 を意味します数の累乗は、再帰的プログラムと非再帰的プログラムの2つの方法で計算できます。以下、それぞれの実装方法を詳しく解説します。非再帰プログラムによる累乗の計算まずは、forループを使用した非再帰的なプログラムの例です。サンプルコード#include<iostream>using namespace std;int power(int x, int y) { int i