C++の階乗後続ゼロ
ここでは、任意の数の階乗の結果の末尾の0の数を計算する方法を説明します。したがって、n =5の場合、5! =120。末尾の0は1つだけです。20の場合! 20として4つのゼロになります! =2432902008176640000。
最も簡単なアプローチは、階乗を計算して0を数えることです。ただし、このアプローチは、nの値が大きい場合は失敗します。したがって、別のアプローチに従います。素因数が2と5の場合、末尾のゼロがあります。2と5を数えると、結果を得ることができます。そのために、このルールに従います。
末尾の0=factorial(n)の素因数の5の数
したがって、末尾の0 =$$ \ lvert \ frac {n} {5} \ rvert + \ lvert \ frac {n} {25} \ rvert + \ lvert \ frac {n} {125} \ rvert + ... $$
>これを解決するには、次の手順に従う必要があります-
- カウントを設定=0
- for i =5、(n / i)> 1、update i =i * 5、do
- count =count +(n / i)
- 返品数
例(C ++)
#include <iostream> #include <cmath> #define MAX 20 using namespace std; int countTrailingZeros(int n) { int count = 0; for (int i = 5; n / i >= 1; i *= 5) count += n / i; return count; } main() { int n = 20; cout << "Number of trailing zeros: " << countTrailingZeros(n); }
入力
Number of trailing zeroes: 20
出力
Number of trailing zeros: 4
-
Nの基数B表現で後続ゼロの数を見つけます! C++を使用する
この記事では、階乗のベースB表現で特定の数Nの後続ゼロを見つける問題を理解します。例 Input : N = 7 Base = 2 Output : 4 Explanation : fact(7) = 5040 in base10 and 1001110110000 in base16 having 4 trailing zero. Input : N = 11 Base = 5 Output : 2 Explanation : fact(11) = 39916800 in base10 and 40204314200 in base16 having 2 trailing zeroes.
-
Nの基数16表現で後続ゼロの数を見つけます! C++を使用する
この記事では、たとえば階乗の基数16の表現で特定の数Nの後続ゼロを見つける問題を理解します Input : N = 7 Output : 1 Explanation : fact(7) = 5040 in base10 and 13B0 in base16 having 1 trailing zero. Input : N = 11 Output : 2 Explanation : fact(11) = 39916800 in base10 and 2611500 in base16 having 2 trailing zeroes. まず、10進数を1つの基数から別の基数に変換するプロセ