मान लीजिए हमारे पास एक संख्या n है, हमें n से कम या बराबर सभी गैर-ऋणात्मक संख्याओं में अंक 1 की कुल संख्या गिननी है। तो यदि इनपुट 15 है, तो आउटपुट 8 होगा, क्योंकि 1 वाली संख्याएं [1,10,11,12,13,14,15] हैं, वहां 8 बार 1 आता है।
इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे -
ret := 0
i := 1 से आरंभ करें, जब i <= n, i = i * 10 करें -
a := n / i, b := n mod i, x := a mod 10
यदि x, 1 के समान है, तो,
ret = ret + (a / 10) * i + (b + 1)
अन्यथा जब x, 0 के समान है, तो -
ret = ret + (a / 10) * i
अन्यथा
ret = ret + (a / 10 + 1) * i
ret लौटाएं
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; class Solution { public: int countDigitOne(int n) { int ret = 0; for(long long int i = 1; i <= n; i*= (long long int)10){ int a = n / i; int b = n % i; int x = a % 10; if(x ==1){ ret += (a / 10) * i + (b + 1); } else if(x == 0){ ret += (a / 10) * i; } else { ret += (a / 10 + 1) *i; } } return ret; } }; main(){ Solution ob; cout << (ob.countDigitOne(15)); }इनपुट
15
आउटपुट
8