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

C++에서 동일한 자릿수 계승 곱의 최대 수


주어진 작업은 선행 또는 후행 0이 없는 최대 수를 찾는 것 또는 해당 자릿수의 계승의 곱이 주어진 숫자 N의 자릿수의 계승의 곱과 동일한 1을 찾는 것입니다.

이제 예제를 사용하여 무엇을 해야 하는지 이해합시다 -

입력 - N =4912

출력 − 73332222

설명 - 4! * 9! * 1! * 2! =7! * 삼! * 삼! * 삼! * 2! * 2! *2! *2! =17,418,240

입력 - N =340

출력 − 3322

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

  • 최대 답을 얻으려면 주어진 숫자를 소수의 계승의 곱으로 표현해야 합니다.

    주어진 숫자에 0과 1만 포함되어 있으면 출력을 찾을 수 없습니다.

  • MaxNum() 함수에서 int 유형의 변수 total_digits를 생성하여 총 자릿수를 저장하고 또한 발생하는 각 숫자의 빈도를 저장하기 위해 int 유형의 다른 배열 Frq[] ={0}를 초기화합니다.

  • i=0에서 i

  • 현재 숫자가 소수이면 배열 Frq[]의 해당 위치에 1을 추가하기만 하면 됩니다.

  • 나머지 숫자는 소수가 아닌 경우 별도의 if 문을 통해 4, 6, 8 또는 9인지 확인한 다음 기본 소수 계승으로 분해하고 그에 따라 빈도를 증가시킵니다.

  • 최종 답변을 저장할 빈 문자열 'ans'를 만듭니다.

  • 마지막 단계를 진행하기 전에 숫자에 1과 0만 포함되어 있는지 확인하세요. 그렇다면 단순히 원래 문자열을 반환하고 그렇지 않으면 다음 단계로 진행하십시오.

  • i=9에서 i>=2까지 루프합니다. int 유형의 변수 C =Frq[i]를 초기화하고 for 루프 내부에서 조건이 while(C--)인 while 루프를 생성합니다. 여기서 ans+=(char)(i+48)을 넣어 최종 답변을 문자열에 저장합니다. 앤.

#include <bits/stdc++.h>
using namespace std;
string MaxNum(string str){
   int total_digits = str.length();
   int Frq[15] = { 0 };
   //Obtaining the frequency of every digit
   for (int i = 0; i < total_digits; i++){
      if (str[i] == '1'|| str[i] == '2'|| str[i] == '3'|| str[i] == '5'|| str[i] == '7'){
         Frq[str[i] - 48] += 1;
      }
      // 4! = 2! * 2! * 3!
      if (str[i] == '4'){
         Frq[2] += 2;
         Frq[3]++;
      }
      // 6! = 5! * 3!
      if (str[i] == '6'){
         Frq[5]++;
         Frq[3]++;
      }
      // 8! = 7! * 2! * 2! * 2!
      if (str[i] == '8'){
         Frq[7]++;
         Frq[2] += 3;
      }
      // 9! = 7! * 3! * 3! * 2!
      if (str[i] == '9'){
         Frq[7]++;
         Frq[3] += 2;
         Frq[2]++;
      }
   }
   string ans = "";
   //If number has only 1 or 0
   if (Frq[1] == total_digits || Frq[0] == total_digits || (Frq[0] + Frq[1]) == total_digits){
      return str;
   }
   else{
      //Maximum number possible
      for (int i = 9; i >= 2; i--){
         int C = Frq[i];
         while (C--){
            ans += (char)(i + 48);
         }
      }
      return ans;
   }
}
//Main function
int main(){
   string str = "340";
   cout << MaxNum(str);
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다 -

3322