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

C++에서 역과의 차이가 k의 곱인 숫자 세기

<시간/>

범위 [l,r]와 숫자 k가 주어집니다. 목표는 l과 r(l<=number<=r) 사이의 모든 숫자를 찾는 것이므로 (해당 숫자의 역수)-(숫자) 결과가 k의 곱이 되도록 합니다.

l에서 r까지 시작하여 이 조건을 확인하고 각 숫자의 역순을 계산합니다. 이제 역에서 숫자를 빼고 (절대 차이) %k==0인지 확인하십시오. 그렇다면 카운트를 증가시키십시오.

예를 들어 이해합시다.

입력 - L=21, R=25, K=6

출력 − 숫자의 개수 − 2

설명 -

The numbers their reverse and difference is:
21, 12, | 21-12 |=9, 9%6!=0
22, 22, | 22-22 |=0 0%6=0 count=1
23,32,  | 32-23 | =9 9%6!=0
24,42,  | 42-24 | =18 18%6=0 count=2
25,52,  | 52-25 | =27 27%6!=0
Total numbers that meet the condition are 2 ( 22,24 )

입력 - L=11, R=15, K=5

출력 − 숫자의 개수 − 1

설명 -

The only number is 11 , | 11-11 | is 0 and 0%5=0

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

  • 범위를 정의하기 위해 정수 L과 R을 사용합니다. 그리고 K는 나눗셈을 확인합니다.

  • countNumbers(int l, int r, int k) 함수는 l,r 및 k를 입력으로 받아 필요한 조건을 충족하는 숫자의 개수를 반환합니다.

  • 초기 카운트를 0으로 합니다.

  • 숫자 rev=0을 반대로 하세요.

  • 나머지 rem=0을 취합니다.

  • i=l에서 시작하여 i=r.

  • 현재 숫자 i를 num에 저장합니다. 그리고 그것의 rev=0.

  • 이제 숫자 num을 반대로 합니다. while(num>0). 렘=num%10. rev=rev*10+rem. 숫자=숫자/10.

  • while rev는 i의 반대가 됩니다.

  • rev와 원래 값의 절대 차이 계산 i. 이 차이가 있으면 | i-rev |%k==0. 그런 다음 카운트를 증가시키십시오.

  • 범위의 모든 숫자에 대해 이 작업을 수행합니다.

  • count의 최종 값은 역과의 차이가 k의 곱인 숫자로 반환됩니다.

예시

#include <iostream>
using namespace std;
int countNumbers(int l, int r, int k){
   int rev = 0;
   int count=0;
   int rem=0;
   for (int i = l; i <= r; i++){
      int num=i;
      rev=0;
      while (num > 0){
         // reverse the number
         rem=num%10;
         rev = rev * 10 + rem;
         num /= 10;
      }
      if((abs(i-rev))%k==0) //original number is i and its reverse is rev
         { count++; }
   }
   return count;
}
int main(){
   int L= 18, R = 24, K = 6;
   cout <<" Numbers whose difference with reverse is product of k:"<<countNumbers(L,R,K);
   return 0;
}

출력

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

Numbers whose difference with reverse is product of k:4