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

C ++の底の変換法を使用して、数値がkの累乗であるかどうかを確認します


ここではプログラムが表示されます。1つの数値が指定され、別の値kも指定されている場合、その数値がkの累乗であるかどうかを確認する必要があります。しかし、この問題を解決するには、底の変換法を実行する必要があります。数値が27で、k =3であるとすると、底の変換法により、27は10003になります。ここで、底を変更した後、桁1が1つだけで、他が0の場合、数値はkの累乗になります。 。

この問題を解決するために、次の手順に従います。

手順

  • フラグを定義する:=false
  • 番号が0より大きい場合は、手順3〜6を繰り返します
  • 数字を見つける:=数値mod k
  • 数字が1より大きい場合は、falseを返します
  • それ以外の場合、数字が1の場合、フラグがTrueの場合はfalseを返し、そうでない場合はフラグ:=trueを返します。
  • 設定番号:=番号/k。
  • trueを返す

#include <iostream>
#include <cmath>
using namespace std;
bool isPowerOfK(int num, int k) {
   bool flag = false;
   while (num > 0) {
      int digit = num % k; //get current digit in base k
      if (digit > 1) //if the digit is not 0 or 1, then it is not power of k
      return false;
      if (digit == 1) {
         if (flag)
            return false;
         flag = true;
      }
      num /= k;
   }
   return true;
}
int main() {
   int number = 27, K = 3;
   if(isPowerOfK(number, K)){
      cout << number << " is power of " << K;
   } else {
      cout << number << " is not power of " << K;
   }
}

出力

27 is power of 3

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