Related Articles

# Self Descriptive Number

• Difficulty Level : Easy
• Last Updated : 09 Oct, 2020

A self-descriptive number is an integer n in given base b is b digits long in which each digit at position p (the most significant digit being at position 0 and the least significant at position b – 1) counts how many times a digit p is in n.
For example in base 10, 6210001000 is a self descriptive number.

Explanation :
It is 10 digit number in base 10.
It has 6 at the position 0 and there are six 0s in 6210001000.
It has 2 at the position 1 and there are two 1s in 6210001000.
It has 1 at the position 2 and there is one 2s in 6210001000.
It has 0 at the position 3 and there are zero 3s in 6210001000.
It has 0 at the position 4 and there are zero 4s in 6210001000.
It has 0 at the position 5 and there are zero 5s in 6210001000.
It has 1 at the position 6 and there is one 6 in 6210001000.
It has 0 at the position 7 and there are zero 7s in 6210001000.
It has 0 at the position 8 and there are zero 8s in 6210001000.
It has 0 at the position 9 and there are zero 9s in 6210001000.
[Source : Wikipedia]

Here is a program to print all self-descriptive numbers below 100000000. In the below program we have just ignored one fact about the self-descriptive number that it should have as many number of digits as much the base is given.

Description of Program :
1 . Firstly all the digits get extracted from the outer loop and are stored in a variable b in each iteration.
2 . Then in the inner loop there is a count on how many times number i (this i is ith index of outer loop) is present in the string.
3 . Finally that count is compared with the digit present at the ith index stored in variable b.

## C++

 `// C++ program to print``// all self descriptive``// number below 100000000``#include ``using` `namespace` `std;` `bool` `isSelfDescriptiveNumber(``int` `num)``{``    ``// converting the integer``    ``// num to string``    ``string s = to_string(num);``    ``for` `(``int` `i = 0;``             ``i < s.size(); i++)``    ``{` `        ``// Extracting each digit``        ``// one by one from the``        ``// string``        ``char` `temp_char = s.at(i);` `        ``// converting the string``        ``// (digit) into integer b``        ``// variable stores the digit``        ``// present at index 'i'``        ``int` `b = temp_char - ``'0'``;` `        ``// counting how many``        ``// times the particular``        ``// digit occur in the``        ``// whole number "num"``        ``int` `count = 0;``        ``for` `(``int` `j = 0;``                 ``j < s.size(); j++)``        ``{``            ``// converting string``            ``// char to integer``            ``int` `temp = s.at(j) - ``'0'``;` `            ``// checking whether it is``            ``// equal to the index 'i'``            ``// if it is then increment``            ``// the count .``            ``if` `(temp == i)``            ``{``                ``count++;``            ``}``        ``}``        ` `        ``// If it is not equal``        ``// it return false .``        ``if` `(count != b)``            ``return` `false``;``    ``}``    ``return` `true``;``}` `// Driver Code``int` `main()``{``    ``for` `(``int` `i = 0; i < 100000000; i++)``        ``if` `(isSelfDescriptiveNumber(i))``            ``cout << i << endl;``}` `// This code is contributed by``// Manish Shaw(manishshaw1)`

## Java

 `// Java program to print all self descriptive``// number below 100000000``public` `class` `SelfDescriptive {` `    ``public` `static` `boolean` `isSelfDescriptiveNumber(``int` `num)``    ``{``        ``// converting the integer num to string``        ``String s = Integer.toString(num);``        ``for` `(``int` `i = ``0``; i < s.length(); i++) {` `            ``// Extracting each digit one by one from the string``            ``String temp_char = s.charAt(i) + ``""``;` `            ``// converting the string (digit) into integer``            ``// b variable stores the digit present at index 'i'``            ``int` `b = Integer.parseInt(temp_char);` `            ``// counting how many times the particular digit``            ``// occur in the whole number "num"``            ``int` `count = ``0``;``            ``for` `(``int` `j = ``0``; j < s.length(); j++) {``                ``// converting string char to integer``                ``int` `temp = Integer.parseInt(s.charAt(j) + ``""``);` `                ``// checking whether it is equal to the index 'i'``                ``// if it is then increment the count .``                ``if` `(temp == i) {``                    ``count++;``                ``}``            ``}` `            ``// If it is not equal``            ``// it return false .``            ``if` `(count != b)``                ``return` `false``;``        ``}``        ``return` `true``;``    ``}` `    ``public` `static` `void` `main(String[] args)``    ``{``        ``for` `(``int` `i = ``0``; i < ``100000000``; i++)``            ``if` `(isSelfDescriptiveNumber(i))``                ``System.out.println(i);       ``    ``}``}`

## Python3

 `# Python3 program to print``# all self descriptive``# number below 100000000``def` `isSelfDescriptiveNumber(num):` `    ``# Converting the integer``    ``# num to string``    ``s ``=` `str``(num)``    ` `    ``for` `i ``in` `range``(``len``(s)):`` ` `        ``# Extracting each digit``        ``# one by one from the``        ``# string``        ``temp_char ``=` `s[i]`` ` `        ``# Converting the string``        ``# (digit) into integer b``        ``# variable stores the digit``        ``# present at index 'i'``        ``b ``=` `ord``(temp_char) ``-` `ord``(``'0'``)`` ` `        ``# Counting how many``        ``# times the particular``        ``# digit occur in the``        ``# whole number "num"``        ``count ``=` `0``        ` `        ``for` `j ``in` `range``(``len``(s)):``            ` `            ``# Converting string``            ``# char to integer``            ``temp ``=` `ord``(s[j]) ``-` `ord``(``'0'``)`` ` `            ``# Checking whether it is``            ``# equal to the index 'i'``            ``# if it is then increment``            ``# the count .``            ``if` `(temp ``=``=` `i):``                ``count ``+``=` `1``                ` `        ``# If it is not equal``        ``# it return false .``        ``if` `(count !``=` `b):``            ``return` `False``    ` `    ``return` `True` `# Driver code``if` `__name__``=``=``"__main__"``:``    ` `    ``for` `i ``in` `range``(``100000000``):``        ``if` `(isSelfDescriptiveNumber(i)):``            ``print``(i)` `# This code is contributed by rutvik_56`

## C#

 `// C# program to print``// all self descriptive``// number below 100000000``using` `System;`` ` `class` `GFG``{``static` `bool` `isSelfDescriptiveNumber(``int` `num)``{``    ``// converting the integer``    ``// num to string``    ``string` `s = num.ToString();``    ``for` `(``int` `i = 0;``             ``i < s.Length; i++)``    ``{` `        ``// Extracting each digit``        ``// one by one from the``        ``// string``        ``string` `temp_char = s[i] + ``""``;` `        ``// converting the string``        ``// (digit) into integer b``        ``// variable stores the digit``        ``// present at index 'i'``        ``int` `b = ``int``.Parse(temp_char);` `        ``// counting how many``        ``// times the particular``        ``// digit occur in the``        ``// whole number "num"``        ``int` `count = 0;``        ``for` `(``int` `j = 0;``                 ``j < s.Length; j++)``        ``{``            ``// converting string``            ``// char to integer``            ``int` `temp = ``int``.Parse(s[j] + ``""``);` `            ``// checking whether it is``            ``// equal to the index 'i'``            ``// if it is then increment``            ``// the count .``            ``if` `(temp == i)``            ``{``                ``count++;``            ``}``        ``}``         ` `        ``// If it is not equal``        ``// it return false .``        ``if` `(count != b)``            ``return` `false``;``    ``}``    ``return` `true``;``}`` ` `// Driver Code``static` `void` `Main()``{``    ``for` `(``int` `i = 0; i < 100000000; i++)``        ``if` `(isSelfDescriptiveNumber(i))``            ``Console.WriteLine(i);   ``}``}`` ` `// This code is contributed by``// Manish Shaw(manishshaw1)`

## PHP

 ``

Output:

```1210
2020
21200
3211000
```

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up