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

C++에서 1에서 N까지의 총 자릿수 계산

<시간/>

입력으로 숫자 N이 제공됩니다. 목표는 숫자 1에서 N 사이의 총 자릿수를 계산하는 것입니다. 1에서 9까지의 숫자는 각각 1개의 숫자가 필요하고, 11에서 99까지는 각각 2개의 숫자가 필요하고, 100에서 999까지는 각각 3개의 숫자가 필요한 식입니다.

예를 들어 이해하자

입력 - N=11

출력 − 1에서 N까지의 총 자릿수 개수:13

설명 − 1부터 9까지의 숫자는 각각 1자리, 9자리 10, 11은 2자리입니다. 4자리. 총 자릿수=9+4=13.

입력 - N=999

출력 − 1에서 N까지의 총 자릿수 개수:2889

설명 − 1~9까지의 숫자는 각각 1자리, 9자리의 10~99는 각각 2자리의 숫자입니다. :180자리. 100 ~ 999는 각각 3자리 수:2700자리 총 자릿수=2700 + 180 + 9 =2889자리

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

우리는 두 가지 접근 방식을 사용할 것입니다. 숫자 num의 숫자를 계산하기 위해 재귀 함수를 사용하는 최초의 순진한 접근 방식. 전달된 숫자를 문자열로 변환합니다. 문자열의 길이는 숫자의 숫자입니다. 현재 num-1을 재귀적으로 우회하는 각 숫자에 대해 이 작업을 수행합니다.

  • 숫자를 양의 정수로 사용하십시오.

  • total_digits(int num) 함수는 num을 받아 1에서 num 사이의 숫자로 숫자를 반환합니다.

  • 숫자의 숫자를 계산하려면 숫자를 문자열로 변환하십시오. (to_string(num)).

  • 문자열의 길이는 숫자의 숫자입니다.

  • num이 1이면 1을 반환합니다. 그렇지 않으면 num보다 작은 나머지 숫자에 대해 length+ total_digits(num-1)를 반환합니다.

  • 결과적으로 총 자릿수를 얻게 됩니다.

효율적인 접근

이 접근 방식에서는 각 숫자에 대해 N까지의 논리를 사용합니다. 10, 100, 1000을 N까지 탐색합니다. 각 10i에 대해 자릿수는 (num-i + 1)입니다.

  • 숫자를 양의 정수로 사용하십시오.

  • total_digits(int num) 함수는 num을 받아 1에서 num 사이의 숫자로 숫자를 반환합니다.

  • 처음에는 총 개수를 0으로 간주합니다.

  • i=1에서 i<=num으로 트래버스하고 각 반복에서 i를 10씩 증가시키고 num-i+1을 추가하여 계산합니다.

  • 결과적으로 for 루프의 끝에서 카운트를 반환합니다.

예(순진한 접근 방식)

#include <bits/stdc++.h>
using namespace std;
int total_digits(int num){
   string str = to_string(num);
   int length = str.length();
   if (num == 1){
      return 1;
   }
   return length + total_digits(num - 1);
}
int main(){
   int num = 20;
   cout<<"Count of total number of digits from 1 to n are: "<<total_digits(num);
   return 0;
}

출력

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

Count of total number of digits from 1 to n are: 31

예(효율적인 접근)

#include <bits/stdc++.h>
using namespace std;
int total_digits(int num){
   int count = 0;
   for(int i = 1; i <= num; i *= 10){
      count = count + (num - i + 1);
   }
   return count;
}
int main(){
   int num = 20;
   cout<<"Count of total number of digits from 1 to n are: "<<total_digits(num);
   return 0;
}

출력

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

Count of total number of digits from 1 to n are: 31