Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

रेंज में अंकों की गणना

मान लीजिए कि हमारे पास 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

  1. C++ में एक अंक के रूप में 0 के साथ 'd' अंक धनात्मक पूर्णांकों की गणना करें

    इस ट्यूटोरियल में, हम एक प्रोग्राम के बारे में चर्चा करेंगे जिसमें डी अंक वाले अंक 0 के साथ एक अंक के रूप में मिलते हैं। इसके लिए हमें एक नंबर d दिया जाएगा। हमारा कार्य d अंक वाले धनात्मक पूर्णांकों की संख्या और उनके अंक के रूप में 0 को गिनना और प्रिंट करना है। उदाहरण #include<bits/stdc++.h>

  1. पायथन काउंट बिट्स को एक सीमा में सेट करता है?

    बाइनरी में परिवर्तित होने पर दी गई सकारात्मक संख्या में कई सेटबिट होते हैं। बाइनरी नंबर में सेट बिट्स को 1 द्वारा दर्शाया जाता है। इस लेख में हम देखेंगे कि बाइनरी वैल्यू में परिवर्तित होने के बाद किसी दिए गए नंबर में सेटबिट्स की संख्या कैसे प्राप्त करें। बिन और स्लाइसिंग का उपयोग करना नीचे दिए गए उ

  1. एक श्रेणी में अनसेट बिट्स को गिनने के लिए पायथन प्रोग्राम।

    एक सकारात्मक संख्या और बिट्स की सीमा को देखते हुए। हमारा काम अनसेट बिट्स को एक रेंज में गिनना है। Input : n = 50, starting address = 2, ending address = 5 Output : 2 2 से 5 की सीमा में 2 अनसेट बिट्स हैं। एल्गोरिदम Step 1 : convert n into its binary using bin(). Step 2 : remove first two characte