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

C++で整数の桁数を求める2つの方法を徹底解説


C++で整数が何桁であるかを調べる方法を紹介します。まずは基本的な伝統的な手法から見ていき、その後、より短いコードで求める方法も解説します。

方法1:10で割り続けてカウントする

最初の方法は、数値を10で割り続け、0になるまでの回数を数えるというものです。10で1回割るごとに桁が1つ減っていくため、割った回数がそのまま桁数になります。

サンプルコード

#include <iostream>
using namespace std;

int count_digit(int number) {
    int count = 0;
    while (number != 0) {
        number = number / 10;
        count++;
    }
    return count;
}

int main() {
    cout << "1245の桁数: " << count_digit(1245) << endl;
}

実行結果

1245の桁数: 4

なお、負の数を扱う可能性がある場合は、ループに入る前に number = abs(number); で絶対値に変換しておくと安全です。

方法2:log10関数を使う短い方法

次に、より簡潔に書ける方法を紹介します。常用対数(底10の対数)を利用すると、桁数は次の式で求められます。

桁数 = int(log10(number) + 1)

例えば数値が1245の場合、1000より大きく10000未満に収まるため、log10(1245)の値は3より大きく4より小さくなります。この整数部分は3となるので、そこに1を加えると「4桁」という答えが得られます。

サンプルコード

#include <iostream>
#include <cmath>
using namespace std;

int count_digit(int number) {
    return int(log10(number) + 1);
}

int main() {
    cout << "1245の桁数: " << count_digit(1245) << endl;
}

実行結果

1245の桁数: 4

利用時の注意点

  • log10を使う方法では、引数が0の場合に対数が定義されずエラーになるため、事前に0かどうかのチェックが必要です。
  • 負の数を扱う場合は、abs()で絶対値に変換してから計算しましょう。
  • 浮動小数点演算の誤差により、非常に大きな数値ではまれに誤った結果になる可能性があります。厳密な正確さが求められる場合は、方法1のようなループ処理の方が確実です。

まとめ

シンプルで確実に動作させたいなら10で割り続ける方法、コードを短く簡潔にしたいならlog10を使う方法が便利です。扱う数値の範囲や要件に応じて、2つの方法を使い分けるとよいでしょう。

  1. C++でドミノとトロミノを使って2×nのボードを埋める配置の数を数えるプログラム

    ここでは、ドミノ(2×1の長方形)とトロミノ(L字型)という2種類のピースを扱います。どちらのピースも、下図のように回転させて使用することができます。整数 n が与えられたとき、これらのピースを組み合わせて 2×n のボードを余りなく完全に埋める配置が何通りあるかを求めます。タイル張りのルールでは、すべてのマスが必ずいずれかのピースで覆われている必要があります。例えば入力が 3 の場合、出力は 5 になります。実際の配置例は以下の通りです(異なる文字は異なるピースを表しています)。[XYZ XXZ XYY XXY XYY][XYZ YYZ XZZ XYY XXY]解法のアプローチ:動的計画法こ

  2. C++のキーワード(予約語)は全部で何個?グループ別に解説

    C++には合計95個の予約語(キーワード)が定義されています。これらの予約語は、由来や用途ごとにいくつかのグループに分けて考えると、とても覚えやすくなります。 グループ1:C言語から引き継がれた予約語(32個) 最初のグループは、Cプログラミング言語にも元々存在していたキーワードです。C++はCをベースに開発された言語であるため、int、if、for、while、structなど、Cからそのまま引き継がれた予約語が32個あります。 グループ2:C++で新たに追加された予約語(30個) 次のグループは、Cには存在しなかった、C++ならではの予約語です。class、new、delete、tem