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 <iostream> 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
<?php // PHP program to print // all self descriptive // number below 100000000 // Note: // 100000000 is a huge no so // it give sometime TLE error // because its takes compile // time above 5 sec function isSelfDescriptiveNumber( $num ) { // converting the integer // num to string $s = strval ( $num ); for ( $i = 0; $i < strlen ( $s ); $i ++) { // 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 = $temp_char - '0' ; // counting how many // times the particular // digit occur in the // whole number "num" $count = 0; for ( $j = 0; $j < strlen ( $s ); $j ++) { // converting string // char to integer $temp = $s [ $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 for ( $i = 0; $i < 100000000; $i ++) if (isSelfDescriptiveNumber( $i )) echo $i . "\n" ; // This code is contributed // by mits ?> |
Output:
1210 2020 21200 3211000
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.