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

C++에서 거듭제곱의 합으로 숫자를 표현하는 방법 세기


입력으로 두 개의 숫자 num과 power가 제공됩니다. 목표는 num이 주어진 거듭제곱으로 거듭난 고유한 자연수의 합으로 표현될 수 있는 방법을 찾는 것입니다. num이 10이고 거듭제곱이 2이면 10을 12+32로 나타낼 수 있습니다. 총 1방향입니다.

예를 들어

입력

num=30

출력

Count of ways to express a number as sum of powers are: 2

설명

The ways in which we can express 30 as sum of powers:
12 + 22 + 52 and 12 + 22 + 32 + 42

입력

num=35

출력

Count of ways to express a number as sum of powers are: 1

설명

The ways in which we can express ‘num’ as sum of powers: 22 + 32

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다. -

이 접근 방식에서 우리는 먼저 숫자 자체가 임의의 num power 의 거듭제곱인지 확인합니다. . 그렇다면 1로 방법을 반환하고, 그렇지 않으면 재귀적으로 sum num power 를 확인합니다. + (숫자+1) .

  • 두 개의 정수 num과 power를 입력으로 사용합니다.

  • 함수 sum_of_powers(int num, int power, int val)는 num을 취해 주어진 거듭제곱으로 거듭난 고유한 자연수의 합으로 'num'을 표현하는 방법의 개수를 반환합니다.

  • 확인=(num − pow(val, power))를 확인합니다. 검사가 0이면 숫자 자체가 val power 이므로 1을 반환합니다. .

  • 검사가 0보다 작으면 0을 반환합니다.

  • 그렇지 않으면 temp=val+1을 사용합니다.

  • ( sum_of_powers(check, power, temp) + sum_of_powers(num, power, temp) )의 합계를 반환합니다.

  • 결국 우리는 값을 반환하는 방법을 얻게 될 것입니다.

예시

#include <bits/stdc++.h>
using namespace std;
int sum_of_powers(int num, int power, int val){
   int check = (num − pow(val, power));
   if(check == 0){
      return 1;
   }
   else if(check < 0){
      return 0;
   } else {
      int temp = val + 1;
      return sum_of_powers(check, power, temp) + sum_of_powers(num, power, temp);
   }
}
int main(){
   int num = 25, power = 2;
   cout<<"Count of ways to express a number as sum of powers are: "<<sum_of_powers(num, power, 1);
   return 0;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

Count of ways to express a number as sum of powers are: 2