Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

주어진 숫자가 주어진 번호로 표현될 수 있는지 확인하십시오. C++의 모든 기본 자릿수

<시간/>

숫자 n과 자릿수 d가 있다고 가정합니다. 숫자 n이 2에서 32 사이의 모든 밑수에서 d 자리 숫자로 표시될 수 있는지 확인해야 합니다. 숫자 n이 8이고 d =4라고 가정하면 이진수로 1000으로 나타낼 수 있습니다. 여기서 d는 4입니다. .

아이디어는 2에서 32까지 모든 기지를 하나씩 확인하는 것입니다. 다음 단계에 따라 기지를 확인할 수 있습니다.

  • 숫자가 밑수보다 작고 숫자가 1이면 true를 반환합니다.
  • 숫자가 하나 이상이고 숫자가 밑수보다 크면 num/base를 수행하여 숫자에서 마지막 숫자를 제거하여 자릿수를 줄인 다음 이 작업을 재귀적으로 반복합니다.
  • 그렇지 않으면 false를 반환합니다.

예시

#include <iostream>
using namespace std;
bool isRepresentedInDDigits(int num, int d, int base) {
   if (d==1 && num < base)
      return true;
   if (d > 1 && num >= base)
      return isRepresentedInDDigits(num/base, --d, base);
      return false;
}
bool checkNumber(int num, int d) {
   // Check for all bases one by one
   for (int base=2; base<=32; base++)
      if (isRepresentedInDDigits(num, d, base))
         return true;
         return false;
}
int main() {
   int num = 8;
   int dig = 2;
   if(checkNumber(num, dig))
      cout << "Can be represented";
   else
      cout << "Can not be represented";
}

출력

Can be represented