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

C++で階乗の最初の桁を求めるプログラムの作成方法

このチュートリアルでは、与えられた数値の階乗(階乗値)の最初の桁(最上位桁)を求めるプログラムをC++で作成します。まず、具体的な例を見てみましょう。

入力 − 7

出力 − 5

これは、7の階乗が 7! = 5040 であり、その最初の桁が「5」であるためです。それでは、問題を解くための手順を確認していきましょう。

解き方の手順

  • 対象となる数値を初期化します。
  • その数値の階乗を計算します。
  • 階乗の値が1桁になるまで、10で割り続けます。

サンプルコード

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

#include <bits/stdc++.h>
using namespace std;
void findFirstDigitOfFactorial(int n) {
    long long int fact = 1;
    for (int i = 2; i <= n; i++) {
        fact = fact * i;
    }
    while (fact >= 10) {
        fact = fact / 10;
    }
    cout << fact << endl;
}
int main() {
    int n = 7;
    findFirstDigitOfFactorial(n);
    return 0;
}

実行結果

上記のプログラムを実行すると、次のような結果が得られます。

5

注意点:オーバーフローについて

この方法では階乗の値を直接計算していますが、long long int でもおよそ 20! 程度までしか正確に格納できません。n が大きくなると簡単にオーバーフローが発生するため注意が必要です。より大きな数値を扱う場合は、対数を利用した計算方法やKamenetskyの公式などを使うことで、桁あふれを避けて最初の桁を求めることができます。

まとめ

今回は、C++で階乗の最初の桁を求める基本的な方法を学びました。階乗を計算し、1桁になるまで10で割るというシンプルなアルゴリズムですが、大きな数値に対するオーバーフローには注意しましょう。本チュートリアルについて質問がある場合は、コメント欄でお気軽にお知らせください。

  1. C++で再帰を使って数値の階乗を計算する方法【初心者向け解説】

    非負整数 n の階乗(factorial)とは、n 以下のすべての正の整数を掛け合わせた値のことです。例えば、7 の階乗は次のように計算され、結果は 5040 になります。7! = 7 * 6 * 5 * 4 * 3 * 2 * 1 7! = 5040この記事では、再帰(recursion)を使って数値の階乗を求める C++ プログラムを紹介します。サンプルコード#include <iostream> using namespace std; int fact(int n) {     if ((n==0)||(n==1))  &n

  2. C++で階乗を求めるプログラム|再帰・非再帰の2つの実装方法を解説

    非負整数 n の階乗とは、n 以下のすべての正の整数を掛け合わせた積のことです。たとえば、5 の階乗は次のように計算されます。5! = 5 × 4 × 3 × 2 × 1 5! = 120整数の階乗は、再帰的なプログラムまたは非再帰的なプログラムのいずれかで求めることができます。ここでは、両方の実装例をサンプルコードとともに紹介します。 方法1:非再帰プログラム(forループ)で階乗を求める 最もシンプルな方法は、for ループを使って 1 から n まで順番に掛け合わせていく方法です。以下のプログラムでその実装を見てみましょう。 サンプルコード #include <iostream&g