मान लीजिए कि हमारे पास एक संख्या n है, हमें n से कम या उसके बराबर सभी गैर-ऋणात्मक संख्याओं में प्रदर्शित होने वाले अंक 1 की कुल संख्या गिननी है। इसलिए यदि इनपुट 15 है, तो आउटपुट 8 होगा, क्योंकि 1 वाली संख्या [1,10,11,12,13,14,15] है, 8 1s हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
रिट:=0
-
प्रारंभ करने के लिए i:=1, जब i <=n, i =i * 10 do -
-
a:=n / i, b:=n mod i, x:=a mod 10
-
अगर x 1 के समान है, तो,
-
रिट =रिट + (ए / 10) * आई + (बी + 1)
-
-
अन्यथा जब x, 0 के समान हो, तब -
-
रिट =रिट + (ए / 10) * मैं
-
-
अन्यथा
-
रिट =रिट + (ए / 10 + 1) * आई
-
-
-
वापसी रिट
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#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