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

C++에서 변환 없이 숫자의 모든 부분 문자열 인쇄


이 문제에서는 정수 n이 주어집니다. 그리고 우리는 형성될 수 있는 숫자의 모든 부분 문자열을 출력해야 하지만 문자열 변환은 허용되지 않습니다. 즉, 정수를 문자열이나 배열로 변환할 수 없습니다.

주제를 더 잘 이해하기 위해 예를 들어 보겠습니다 -

Input: number =5678
Output: 5, 56, 567, 5678, 6, 67, 678, 7, 78, 8

이 문제를 해결하려면 수학적 논리를 사용해야 합니다. 여기서는 최상위 비트를 먼저 인쇄한 다음 연속 비트를 인쇄합니다.

알고리즘

Step1: Take a 10’s power number based on the number of digits.
Step2: print values recursively and divide the number by 10 and repeat until the number becomes 0.
Step3: Eliminate the MSB of the number and repeat step 2 with this number.
Step4: Repeat till the number becomes 0.

예시

#include <iostream>
#include<math.h>
using namespace std;
void printSubNumbers(int n) ;
int main(){
   int n = 6789;
   cout<<"The number is "<<n<<" and the substring of number are :\n";
   printSubNumbers(n);
   return 0;
}
void printSubNumbers(int n){
   int s = log10(n);
   int d = (int)(pow(10, s) + 0.5);
   int k = d;
   while (n) {
      while (d) {
         cout<<(n / d)<<" ";
         d = d / 10;
      }
      n = n % k;
      k = k / 10;
      d = k;
   }
}

출력

숫자는 6789이고 숫자의 하위 문자열은 -

입니다.
6 67 678 6789 7 78 789 8 89 9