입력으로 숫자 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