여기서 우리는 하나의 숫자가 주어지면 다른 값 k도 주어지면 그 숫자가 k의 거듭제곱인지 확인해야 하는 프로그램을 볼 것입니다. 그러나 이 문제를 해결하기 위해서는 베이스 변경 방법을 수행해야 합니다. 숫자가 27이고 k =3이라고 가정합니다. 그러면 밑수 변경 방법에 의해 27은 10003이 됩니다. 여기에서 밑수를 변경한 후 숫자 1이 한 번만 발생하고 나머지는 0이면 그 숫자는 k의 거듭제곱입니다. .
이 문제를 해결하기 위해 다음 단계를 따릅니다.
단계 -
- 플래그 정의 :=false
- 숫자> 0일 때 3~6단계 반복
- 숫자 찾기:=숫자 모드 k
- 숫자가> 1이면 false를 반환합니다.
- 그렇지 않으면 숫자가 1일 때 플래그가 True이면 false를 반환하고 그렇지 않으면 flag :=true를 반환합니다.
- set number :=number / k.
- 참을 반환
예시
#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