ধরুন আমাদের একটি সংখ্যা n আছে, আমাদের n-এর থেকে কম বা সমান সমস্ত অ-ঋণাত্মক সংখ্যায় উপস্থিত 1 সংখ্যার মোট সংখ্যা গণনা করতে হবে। তাই যদি ইনপুট 15 হয়, তাহলে আউটপুট হবে 8, কারণ 1 আছে এমন সংখ্যা [1,10,11,12,13,14,15], সেখানে 8 1s আছে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
ret :=0
-
শুরু করার জন্য i :=1, যখন i <=n, i =i * 10 do −
-
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
-
-
-
রিটার্ন রিটার্ন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#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