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

기타의 거듭제곱으로 숫자의 C++ 표현

<시간/>

다른 숫자의 거듭제곱으로 숫자를 나타내는 문제에 대해 토론합니다. 두 개의 숫자 x, y가 주어집니다. 예를 들어, x의 각 거듭제곱이 한 번 사용될 수 있는 x의 거듭제곱으로 y를 나타낼 수 있는지 여부를 알려야 합니다. 예를 들면

Input: x = 4, y = 11
Output: true
Explanation: 4^2 - 4^1 - 4^0 = 11 Hence y can be represented in the power of x.

Input: x = 2, y = 19
Output: true
Explanation: 2^4 + 2^1 + 2^0 =19 Hence y can be represented in the power of x.

Input: x = 3, y = 14
Output: false
Explanation: 14 can be represented as 3^2 + 3^1 + 3^0 + 3^0 but we cannot use one term of power of x twice.

해결책을 찾기 위한 접근 방식

19가 2의 거듭제곱으로 표현되는 방법에 대한 예제를 검토하여 방정식을 형성할 수 있습니다. -

c0(x^0) + c1(x^1) + c2(x^2) + c3(x^3) + … = y ….(1),

여기서 c0, c1, c2는 -1, 0, +1이 될 수 있어 (-1) 뺄 항, (+1) 더할 항, (0) 포함하지 않을 항 -

c1(x^1) + c2(x^2) + c3(x^3) + … = y - c0,

x를 일반적으로 사용하면

c1(x^0) + c2(x^1) + c3(x^2) + … = (y - c0)/x ….(2),

eq (1)과 (2)에서 우리는 방법에 있는 숫자를 다시 나타낼 수 있으며 솔루션이 존재하려면 (y - Ci)는 x로 나눌 수 있어야 하고 Ci는 -1, 0 및 +1만 포함할 수 있습니다.

따라서 마지막으로 [(y-1) % x ==0] 또는 [(y) % x ==0] 또는 [(y+1) % x ==0]인지 y>0인지 확인해야 합니다. 솔루션이 존재하지 않습니다.

#include <bits/stdc++.h>
using namespace std;
int main(){
   int x = 2, y = 19;
   // checking y divisibility till y>0
   while (y>0) {
      // If y-1 is divisible by x.
      if ((y - 1) % x == 0)
         y = (y - 1) / x;
        // If y is divisible by x.
      else if (y % x == 0)
         y = y / x;
         // If y+1 is divisible by x.
      else if ((y + 1) % x == 0)
         y = (y + 1) / x;
         // If no condition satisfies means
         // y cannot be represented in terms of power of x.
      else
         break;
   }
   if(y==0)
      cout<<"y can be represented in terms of the power of x.";
   else
      cout<<"y cannot be represented in terms of the power of x.";
   return 0;
}

출력

y can be represented in terms of the power of x.

결론

이 튜토리얼에서는 다른 숫자의 거듭제곱으로 숫자의 표현이 가능한지 확인하는 방법에 대해 논의했습니다. 이 문제를 해결하기 위한 간단한 접근 방식을 y로 현재, 선행 및 후속 숫자 분할 가능성을 확인하여 논의했습니다.

우리는 또한 C, Java, Python 등과 같은 프로그래밍 언어로 할 수 있는 이 문제에 대한 C++ 프로그램에 대해 논의했습니다. 이 튜토리얼이 도움이 되기를 바랍니다.