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

C++에서 n과 x가 매우 큰 n^x의 자릿수 재귀 합

<시간/>

양의 정수 변수는 'num'과 'x'로 지정됩니다. 작업은 num ^ x를 재귀적으로 계산한 다음 한 자릿수가 달성되지 않을 때까지 결과 숫자의 자릿수를 더하고 결과 한 자릿수가 출력이 될 것입니다.

여기에 대한 다양한 입력 출력 시나리오를 살펴보겠습니다 -

입력 - 정수 숫자 =2345, 정수 x =3

출력 − n^x의 자릿수 재귀 합, 여기서 n과 x는 매우 큼:8

설명 - 우리는 양의 정수 값을 num으로, x를 2345로, 거듭제곱을 3으로 지정합니다. 먼저 2345 ^ 3 즉 12,895,213,625를 계산합니다. 이제 1 + 2 + 8 + 9 + 5 + 2 + 1 + 3 + 6 + 2 + 5 즉 44와 같은 숫자를 추가합니다. 이제 4 + 4 즉 8을 추가합니다. 따라서 한 자리 수를 달성했으므로 , 출력은 8입니다.

입력 - 정수 숫자 =3, 정수 x =3

출력 − n^x에 있는 숫자의 재귀 합, 여기서 n과 x는 매우 큼:9

설명 − 우리는 양의 정수 값을 num으로, x 값을 3으로, 거듭제곱을 3으로 지정합니다. 먼저 3 ^ 3, 즉 9를 계산합니다. 따라서 한 자릿수를 달성했으므로 출력은 9이고 더 이상의 계산은 필요하지 않습니다.

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

  • 정수 변수를 num 및 x로 입력하고 추가 처리를 위해 데이터를 Recursive_Digit(num, x) 함수에 전달합니다.

  • Recursive_Digit(num, x)

    함수 내부
    • 변수 'total'을 long으로 선언하고 인수로 전달된 숫자의 자릿수 합을 반환하는 total_digits(num) 함수를 호출하도록 설정합니다.

    • 변수를 long 유형의 temp로 선언하고 power % 6

      으로 설정하십시오.
    • 합계 =3 OR 합계 =6 AND 거듭제곱> 1인 경우 IF를 확인한 다음 9를 반환합니다.

    • ELSE IF, 거듭제곱 =1이면 합계를 반환합니다.

    • ELSE IF, power =0 다음 1을 반환합니다.

    • ELSE IF, temp - 0이면 total_digits((long)pow(total, 6))

      에 대한 호출을 반환합니다.
    • ELSE, total_digits((long)pow(total, temp))를 반환합니다.

  • 함수 내부 long total_digits(long num)

    • IF num =0을 확인한 다음 0을 반환합니다. IF를 확인하고 num % 9 =0을 확인한 다음 9를 반환합니다.

    • 그렇지 않으면 숫자 % 9를 반환합니다.

예시

#include <bits/stdc++.h>
using namespace std;
long total_digits(long num){
   if(num == 0){
      return 0;
   }
   if(num % 9 == 0){
      return 9;
   }
   else{
      return num % 9;
   }
}
long Recursive_Digit(long num, long power){
   long total = total_digits(num);
   long temp = power % 6;
   if((total == 3 || total == 6) & power > 1){
      return 9;
   }
   else if (power == 1){
      return total;
   }
   else if (power == 0){
      return 1;
   }
   else if (temp == 0){
      return total_digits((long)pow(total, 6));
   }
   else{
      return total_digits((long)pow(total, temp));
   }
}
int main(){
   int num = 2345;
   int x = 98754;
   cout<<"Recursive sum of digit in n^x, where n and x are very large are: "<<Recursive_Digit(num, x);
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 출력이 생성됩니다.

Recursive sum of digit in n^x, where n and x are very large are: 1