# Disarium Number

Last Updated : 05 May, 2023

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` `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

 ``

Output

`Disarium Number`

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