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

Xのような最小数Xを見つけてください! C++では少なくともY個の末尾のゼロが含まれています


数Yを取る必要があります、Xのような最小の数Xを見つけます!少なくともY個のトレーニングゼロが含まれています。たとえば、Y =2の場合、Xの値は10です。Xとして! =3228800。Y個のゼロがあります。

二分探索を使用してこれを解決できます。 Nの後続ゼロの数! N!の因数5の数で与えられます。 Xは、範囲[0、5 * Y]

で二分探索を使用して見つけることができます。

#include<iostream>
using namespace std;
int factorCount(int n, int X) {
   if (X < n)
      return 0;
   return (X / n + factorCount(n, X / n));
}
int findX(int Y) {
   int left = 0, right = 5 * Y;
   int N = 0;
   while (left <= right) {
      int mid = (right + left) / 2;
   if (factorCount(5, mid) < Y) {
      left = mid + 1;
   }else {
      N = mid;
      right = mid - 1;
      }
   }
   return N;
}
int main() {
   int Y = 4;
   cout << "Smallest value of X: " << findX(Y);
}

出力

Smallest value of X: 20

  1. 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.

  2. 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つの基数から別の基数に変換するプロセ