मान लीजिए कि हमारे पास 0 और 9 के बीच एक पूर्णांक d है, हमारे पास क्रमशः निम्न और ऊपरी सीमा के रूप में दो सकारात्मक पूर्णांक निम्न और उच्च हैं। हमें निम्न और उच्च के बीच सभी पूर्णांकों में अंकों के रूप में d के आने की संख्या ज्ञात करनी है, जिसमें निम्न और उच्च की सीमाएँ शामिल हैं।
इसलिए, यदि इनपुट d =1, निम्न =1, उच्च =13 जैसा है, तो आउटपुट 6 होगा, क्योंकि अंक d=1 1,10,11,12,13 की तरह 6 बार आता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
फ़ंक्शन शून्य () को परिभाषित करें, इसमें n लगेगा,
-
रिट:=0, एक्स:=0
-
यदि n, 0 के समान है, तो -
-
वापसी 1
-
-
इनिशियलाइज़ m :=1 के लिए, जब m <=n, अपडेट m :=m * 10, करें -
-
ए:=एन / एम
-
बी:=एन मॉड एम
-
z:=एक मॉड 10
-
यदि m में अंकों की संख्या n में अंकों की संख्या के समान है, तो -
-
लूप से बाहर आएं
-
-
यदि z> x, तो -
-
रिट :=रिट + ((ए / 10) + 1)
-
-
अन्यथा जब z, x के समान हो, तब
-
रिट:=रिट + ((ए / 10) * एम + (बी + 1))
-
-
अन्यथा
-
रिट:=रिट + (ए / 10)
-
-
-
वापसी रिट
-
फ़ंक्शन f() को परिभाषित करें, इसमें x, n,
लगेगा -
रिट:=0
-
इनिशियलाइज़ m :=1 के लिए, जब m <=n, अपडेट m :=m * 10, करें -
-
ए:=एन / एम
-
बी:=एन मॉड एम
-
z:=एक मॉड 10
-
अगर z> x, तो
-
रिट :=रिट + ((ए / 10) + 1)
-
-
अन्यथा जब z, x के समान हो, तब -
-
रिट:=रिट + ((ए / 10) * एम + (बी + 1))
-
-
अन्यथा
-
रिट:=रिट + (ए / 10)
-
-
यदि x, 0 के समान है, तो -
-
रिट:=रिट - एम
-
-
-
वापसी रिट
-
मुख्य विधि से निम्न कार्य करें
-
वापसी रिट
-
वापसी f(d, high - f(d, low - 1))
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; class Solution { public: int digitCount(int x){ int ret = 0; while (x) { ret++; x /= 10; } return ret; } int zero(int n){ int ret = 0; int x = 0; if (n == 0) return 1; for (int m = 1; m <= n; m *= 10) { int a = n / m; int b = n % m; int z = a % 10; if (digitCount(m) == digitCount(n)) break; if (z > x) { ret += ((a / 10) + 1) * m; } else if (z == x) { ret += (a / 10) * m + (b + 1); } else { ret += (a / 10) * m; } cout << ret << endl; } return ret; } int f(int x, int n){ int ret = 0; for (int m = 1; m <= n; m *= 10) { int a = n / m; int b = n % m; int z = a % 10; if (z > x) { ret += ((a / 10) + 1) * m; } else if (z == x) { ret += (a / 10) * m + (b + 1); } else { ret += (a / 10) * m; } if (x == 0) { ret -= m; } } return ret; } int digitsCount(int d, int low, int high){ return f(d, high) - f(d, low - 1); } }; main(){ Solution ob; cout << (ob.digitsCount(1,1,13)); }
इनपुट
1,1,13
आउटपुट
6