여기서 우리는 하나의 숫자가 주어지면 다른 값 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