हमें इनपुट के रूप में एक संख्या 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 को स्ट्रिंग में बदलें। स्ट्रिंग की लंबाई num में अंक है। वर्तमान num-1 को रिकर्सिवली पास करके प्रत्येक संख्या के लिए ऐसा करें।
- एक संख्या को धनात्मक पूर्णांक के रूप में लें।
- फंक्शन
total_digits(int num)numलेता है और 1 सेnumके बीच की संख्याओं में अंक लौटाता है। numमें अंकों की गणना करने के लिए,numको स्ट्रिंग में बदलें (to_string(num))।- स्ट्रिंग की लंबाई
numमें अंक है। - यदि
num1 है तो 1 लौटाएँ। अन्यथा शेष संख्याओं के लिएlength + total_digits(num-1)लौटाएँ जोnumसे कम हैं। - अंत में हमें कुल अंक परिणाम के रूप में प्राप्त होंगे।
कुशल दृष्टिकोण
इस दृष्टिकोण में, हम इस तर्क का उपयोग करेंगे कि N तक की प्रत्येक संख्या के लिए। हम 10, 100, 1000 तक N तक ट्रैवर्स करेंगे। प्रत्येक 10^i के लिए, अंकों की संख्या (num - i + 1) है।
- एक संख्या को धनात्मक पूर्णांक के रूप में लें।
- फंक्शन
total_digits(int num)numलेता है और 1 सेnumके बीच की संख्याओं में अंक लौटाता है। - कुल काउंट को प्रारंभ में 0 लें।
- i=1 से i<=num तक ट्रैवर्स करें, प्रत्येक पुनरावृत्ति में i को 10 से बढ़ाएँ और
num - i + 1को काउंट में जोड़ें। - फॉर लूप के अंत में परिणाम के रूप में काउंट लौटाएँ।
उदाहरण (सामान्य दृष्टिकोण)
#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