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

C++에서 숫자가 0이고 최대 'd'자릿수가 있는 양의 정수를 셉니다.

<시간/>

자릿수를 나타내는 숫자 d가 주어집니다. 목표는 숫자가 0이고 최대 d자리인 양의 정수 개수를 찾는 것입니다. 모든 1자리, 2자리, 3자리…

우리는 먼저 숫자가 d개이고 적어도 하나의 0이 있는 숫자의 개수를 찾을 것입니다. d=3이라고 합시다. 0이 하나 이상 포함된 3자리 숫자를 만드는 방법은 다음과 같습니다. -

C++에서 숫자가 0이고 최대  d 자릿수가 있는 양의 정수를 셉니다.

여기서 d1은 1~9를 가질 수 있습니다. 10d-1d자리의 경우 0이 없는 숫자는 다음과 같습니다. 

예를 들어 이해하자

입력 - d=4

출력 − 숫자가 0이고 최대 'd' 숫자가 − 2619인 양의 정수 개수

설명 − 적어도 하나의 0이 포함된 x자리 숫자 −

1자리 숫자 :02자리 숫자 :93자리 숫자 :1714자리 숫자:2439Total=9+171+2439 =2619

입력 - d=1

출력 − 숫자가 0이고 최대 'd' 숫자가 − 0인 양의 정수 개수

설명 − 1에서 9까지는 숫자가 0이 아닙니다.

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

우리는 두 가지 접근 방식을 사용할 것입니다. for 루프를 사용하는 첫 번째 순진한 접근 방식입니다. 1자리에서 d자리까지 순회를 시작하고 위에서 언급한 공식을 사용하여 숫자를 계산합니다. 카운트에 반환된 값을 추가합니다.

  • 숫자는 정수 d를 사용합니다.

  • total_count(int d)) 함수는 자릿수 d를 취해 d자릿수가 적어도 하나의 0을 갖는 숫자의 개수를 반환합니다.

  • temp=9*(pow(10,d-1) - pow(9,d-1));

    와 같은 숫자를 계산합니다.
  • 반환 온도.

  • 함수 maximum_d(int d)는 최대 자릿수 d를 취하고 최소 하나의 0을 갖는 최대 d자릿수의 개수를 반환합니다.

  • 루프를 사용하여 1자리 숫자에서 시작하여 2까지 등 d까지 순회합니다.

  • 각 d에 대해 total_count(i)로 숫자를 계산합니다. 이것을 추가하여 계산하십시오.

  • 마침내 우리는 총계를 얻게 될 것입니다.

  • 결과로 카운트를 반환합니다.

효율적인 접근

이 접근 방식에서는 위의 계산에 대해 형성된 G.P를 관찰하여 개수를 계산합니다.

해는 9 x(10
d-1
) - 9
d-1
 )=9 x (10
d
 - 1)- 9 x (9
d
 -1)=9 x (10
i
 - 1) - 9 x (9
i
 - 1) ( 1<=i<=d )=g.p 
1
 - g.p 
2
 =9x(10
d
 -1)/(10-1) - 9x(9
d
 -1)/(9-1)=(10d-1)- (9/8)*(9d-1)
  • d를 최대 자릿수로 사용합니다.

  • 함수 maximum_d(int d)는 최대 자릿수 d를 사용하여 최소 하나의 0을 갖는 최대 d자릿수의 개수를 반환합니다.

  • 위 공식을 사용하여 temp_1을 9*((pow(10,d)-1)/9)로 계산합니다.

  • temp_2를 9*((pow(9,d)-1)/8)로 계산합니다.

  • 세트 수 =temp_1 - temp_2.

  • 결과로 카운트를 반환합니다.

예(순진한 접근 방식)

#include네임스페이스 사용 std;int total_count(int d){ int temp =9*(pow(10,d-1) - pow(9,d-1)); 반환 온도;}int maximum_d(int d){ int count =0; for (int i=1; i<=d; i++){ count =count + total_count(i); } 반환 횟수;}int main(){ int d =5; cout<<"숫자가 0이고 최대 'd'자릿수가 있는 양의 정수 개수는 다음과 같습니다. "< 

출력

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

숫자가 0이고 최대 'd'자릿수가 있는 양의 정수 개수:33570

예(효율적인 접근)

#include네임스페이스 std;int maximum_d(int d){ int temp_1 =9*((pow(10,d)-1)/9); 정수 temp_2 =9*((pow(9,d)-1)/8); 정수 수 =temp_1 - temp_2; 반환 횟수;}int main(){ int d =4; cout<<"숫자가 0이고 최대 'd'자릿수가 있는 양의 정수 개수는 다음과 같습니다. "< 

출력

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

숫자가 0이고 최대 'd'자릿수가 있는 양의 정수 개수:2619