ধরুন আমাদের একটি সংখ্যা 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