Open In App

Disarium Number

Improve
Improve
Like Article
Like
Save
Share
Report

Given a number “n”, find if it is Disarium or not. A number is called Disarium if sum of its digits powered with their respective positions is equal to the number itself.

Examples: 

Input   : n = 135
Output  : Yes 
1^1 + 3^2 + 5^3 = 135
Therefore, 135 is a Disarium number

Input   : n = 89
Output  : Yes 
8^1+9^2 = 89
Therefore, 89 is a Disarium number

Input   : n = 80
Output  : No
8^1 + 0^2 = 8
Recommended Practice

The idea is to first count digits in given numbers. Once we have count, we traverse all digits from right most (using % operator), raise its power to digit count and decrement the digit count.

Below is the implementation of above idea. 

C++




// C++ program to check whether a number is Disarium
// or not
#include<bits/stdc++.h>
using namespace std;
 
// Finds count of digits in n
int countDigits(int n)
{
    int count_digits = 0;
 
    // Count number of digits in n
    int x = n;
    while (x)
    {
        x = x/10;
 
        // Count the no. of digits
        count_digits++;
    }
    return count_digits;
}
 
// Function to check whether a number is disarium or not
bool check(int n)
{
    // Count digits in n.
    int count_digits = countDigits(n);
 
    // Compute sum of terms like digit multiplied by
    // power of position
    int sum = 0; // Initialize sum of terms
    int x = n;
    while (x)
    {
        // Get the rightmost digit
        int r = x%10;
 
        // Sum the digits by powering according to
        // the positions
        sum = sum + pow(r, count_digits--);
        x = x/10;
    }
 
    // If sum is same as number, then number is
    return (sum == n);
}
 
//Driver code to check if number is disarium or not
int main()
{
    int n = 135;
    if( check(n))
        cout << "Disarium Number";
    else
        cout << "Not a Disarium Number";
    return 0;
}


Java




// Java program to check whether a number is disarium
// or not
 
class Test
{
    // Method to check whether a number is disarium or not
    static boolean check(int n)
    {
        // Count digits in n.
        int count_digits = Integer.toString(n).length();
      
        // Compute sum of terms like digit multiplied by
        // power of position
        int sum = 0; // Initialize sum of terms
        int x = n;
        while (x!=0)
        {
            // Get the rightmost digit
            int r = x%10;
      
            // Sum the digits by powering according to
            // the positions
            sum = (int) (sum + Math.pow(r, count_digits--));
            x = x/10;
        }
      
        // If sum is same as number, then number is
        return (sum == n);
    }
     
    // Driver method
    public static void main(String[] args)
    {
        int n = 135;
         
        System.out.println(check(n) ? "Disarium Number" : "Not a Disarium Number");
    }
}


Python3




# Python program to check whether a number is Disarium
# or not
import math
 
# Method to check whether a number is disarium or not
def check(n) :
 
    # Count digits in n.
    count_digits = len(str(n))
      
    # Compute sum of terms like digit multiplied by
    # power of position
    sum = 0  # Initialize sum of terms
    x = n
    while (x!=0) :
 
        # Get the rightmost digit
        r = x % 10
          
        # Sum the digits by powering according to
        # the positions
        sum = (int) (sum + math.pow(r, count_digits))
        count_digits = count_digits - 1
        x = x//10
        
    # If sum is same as number, then number is
    if sum == n :
        return 1
    else :
        return 0
       
# Driver method
n = 135
if (check(n) == 1) :
    print ("Disarium Number")
else :
    print ("Not a Disarium Number")
  
# This code is contributed by Nikita Tiwari.


C#




// C# program to check whether a number
// is Disarium or not
using System;
 
class GFG{
     
// Method to check whether a number
// is disarium or not
static bool check(int n)
{
     
    // Count digits in n.
    int count_digits = n.ToString().Length;
  
    // Compute sum of terms like digit
    // multiplied by power of position
    // Initialize sum of terms
    int sum = 0;
    int x = n;
     
    while (x != 0)
    {
         
        // Get the rightmost digit
        int r = x % 10;
  
        // Sum the digits by powering according
        // to the positions
        sum = (int)(sum + Math.Pow(
              r, count_digits--));
        x = x / 10;
    }
  
    // If sum is same as number,
    // then number is
    return (sum == n);
}
 
// Driver code
public static void Main(string[] args)
{
    int n = 135;
     
    Console.Write(check(n) ? "Disarium Number" :
                       "Not a Disarium Number");
}
}
 
// This code is contributed by rutvik_56


Javascript




<script>
 
// JavaScript program to check whether a number is Disarium
// or not
// Method to check whether a number is disarium or not
function check(n)
    {
     
        // Count digits in n.
        var count_digits = n.toString().length;
      
        // Compute sum of terms like digit multiplied by
        // power of position
        var sum = 0; // Initialize sum of terms
        var x = n;
        while (x!=0)
        {
            // Get the rightmost digit
            var r = x%10;
      
            // Sum the digits by powering according to
            // the positions
            sum = (sum + Math.pow(r, count_digits--));
            x = x/10;
        }
      
        // If sum is same as number, then number is
        return (sum == n);
    }
     
    // Driver method
        var n = 135;
         
        document.write(check(n) ? "Disarium Number" : "Not a Disarium Number");
         
// This code is contributed by shivanisinghss2110
</script>


Output

Disarium Number

Time complexity : O(logn) 
Auxiliary Space : O(1)

 



Last Updated : 05 May, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads