Skip to content
Related Articles

Related Articles

Program for Armstrong Numbers

View Discussion
Improve Article
Save Article
Like Article
  • Difficulty Level : Easy
  • Last Updated : 22 Jun, 2022

Given a number x, determine whether the given number is Armstrong number or not. 

A positive integer of n digits is called an Armstrong number of order n (order is number of digits) if. 

abcd… = pow(a,n) + pow(b,n) + pow(c,n) + pow(d,n) + …. 

Example: 

Input : 153

Output : Yes

153 is an Armstrong number.

1*1*1 + 5*5*5 + 3*3*3 = 153

Input : 120

Output : No

120 is not a Armstrong number.

1*1*1 + 2*2*2 + 0*0*0 = 9

Input : 1253

Output : No

1253 is not a Armstrong Number

1*1*1*1 + 2*2*2*2 + 5*5*5*5 + 3*3*3*3 = 723

Input : 1634

Output : Yes

1*1*1*1 + 6*6*6*6 + 3*3*3*3 + 4*4*4*4 = 1634

Approach: The idea is to first count number digits (or find order). Let the number of digits be n. For every digit r in input number x, compute rn. If sum of all such values is equal to n, then return true, else false.

C++




// C++ program to determine whether the number is
// Armstrong number or not
#include <bits/stdc++.h>
using namespace std;
 
/* Function to calculate x raised to the power y */
int power(int x, unsigned int y)
{
    if (y == 0)
        return 1;
    if (y % 2 == 0)
        return power(x, y / 2) * power(x, y / 2);
    return x * power(x, y / 2) * power(x, y / 2);
}
 
/* Function to calculate order of the number */
int order(int x)
{
    int n = 0;
    while (x) {
        n++;
        x = x / 10;
    }
    return n;
}
 
// Function to check whether the given number is
// Armstrong number or not
bool isArmstrong(int x)
{
    // Calling order function
    int n = order(x);
    int temp = x, sum = 0;
    while (temp) {
        int r = temp % 10;
        sum += power(r, n);
        temp = temp / 10;
    }
 
    // If satisfies Armstrong condition
    return (sum == x);
}
 
// Driver Program
int main()
{
    int x = 153;
    cout << boolalpha << isArmstrong(x) << endl;
    x = 1253;
    cout << boolalpha << isArmstrong(x) << endl;
    return 0;
}

C




// C program to find Armstrong number
 
#include <stdio.h>
 
/* Function to calculate x raised to the power y */
int power(int x, unsigned int y)
{
    if (y == 0)
        return 1;
    if (y % 2 == 0)
        return power(x, y / 2) * power(x, y / 2);
    return x * power(x, y / 2) * power(x, y / 2);
}
 
/* Function to calculate order of the number */
int order(int x)
{
    int n = 0;
    while (x) {
        n++;
        x = x / 10;
    }
    return n;
}
 
// Function to check whether the given number is
// Armstrong number or not
int isArmstrong(int x)
{
    // Calling order function
    int n = order(x);
    int temp = x, sum = 0;
    while (temp) {
        int r = temp % 10;
        sum += power(r, n);
        temp = temp / 10;
    }
 
    // If satisfies Armstrong condition
    if (sum == x)
        return 1;
    else
        return 0;
}
 
// Driver Program
int main()
{
    int x = 153;
    if (isArmstrong(x) == 1)
        printf("True\n");
    else
        printf("False\n");
 
    x = 1253;
    if (isArmstrong(x) == 1)
        printf("True\n");
    else
        printf("False\n");
 
    return 0;
}

Java




// Java program to determine whether the number is
// Armstrong number or not
public class Armstrong {
    /* Function to calculate x raised to the
       power y */
    int power(int x, long y)
    {
        if (y == 0)
            return 1;
        if (y % 2 == 0)
            return power(x, y / 2) * power(x, y / 2);
        return x * power(x, y / 2) * power(x, y / 2);
    }
 
    /* Function to calculate order of the number */
    int order(int x)
    {
        int n = 0;
        while (x != 0) {
            n++;
            x = x / 10;
        }
        return n;
    }
 
    // Function to check whether the given number is
    // Armstrong number or not
    boolean isArmstrong(int x)
    {
        // Calling order function
        int n = order(x);
        int temp = x, sum = 0;
        while (temp != 0) {
            int r = temp % 10;
            sum = sum + power(r, n);
            temp = temp / 10;
        }
 
        // If satisfies Armstrong condition
        return (sum == x);
    }
 
    // Driver Program
    public static void main(String[] args)
    {
        Armstrong ob = new Armstrong();
        int x = 153;
        System.out.println(ob.isArmstrong(x));
        x = 1253;
        System.out.println(ob.isArmstrong(x));
    }
}

Python




# Python program to determine whether the number is
# Armstrong number or not
 
# Function to calculate x raised to the power y
 
 
def power(x, y):
    if y == 0:
        return 1
    if y % 2 == 0:
        return power(x, y/2)*power(x, y/2)
    return x*power(x, y/2)*power(x, y/2)
 
# Function to calculate order of the number
 
 
def order(x):
 
    # variable to store of the number
    n = 0
    while (x != 0):
        n = n+1
        x = x/10
    return n
 
# Function to check whether the given number is
# Armstrong number or not
 
 
def isArmstrong(x):
    n = order(x)
    temp = x
    sum1 = 0
    while (temp != 0):
        r = temp % 10
        sum1 = sum1 + power(r, n)
        temp = temp/10
 
    # If condition satisfies
    return (sum1 == x)
 
 
# Driver Program
x = 153
print(isArmstrong(x))
x = 1253
print(isArmstrong(x))

Python3




# python3 >= 3.6 for typehint support
# This example avoids the complexity of ordering
# through type conversions & string manipulation
 
 
def isArmstrong(val: int) -> bool:
    """val will be tested to see if its an Armstrong number.
    Arguments:
        val {int} -- positive integer only.
    Returns:
        bool -- true is /false isn't
    """
 
    # break the int into its respective digits
    parts = [int(_) for _ in str(val)]
 
    # begin test.
    counter = 0
    for _ in parts:
        counter += _**3
    return (counter == val)
 
 
# Check Armstrong number
print(isArmstrong(153))
 
print(isArmstrong(1253))

C#




// C# program to determine whether the
// number is Armstrong number or not
using System;
 
public class GFG {
 
    // Function to calculate x raised
    // to the power y
    int power(int x, long y)
    {
        if (y == 0)
            return 1;
        if (y % 2 == 0)
            return power(x, y / 2) * power(x, y / 2);
 
        return x * power(x, y / 2) * power(x, y / 2);
    }
 
    // Function to calculate
    // order of the number
    int order(int x)
    {
        int n = 0;
        while (x != 0) {
            n++;
            x = x / 10;
        }
        return n;
    }
 
    // Function to check whether the
    // given number is Armstrong number
    // or not
    bool isArmstrong(int x)
    {
 
        // Calling order function
        int n = order(x);
        int temp = x, sum = 0;
        while (temp != 0) {
            int r = temp % 10;
            sum = sum + power(r, n);
            temp = temp / 10;
        }
 
        // If satisfies Armstrong condition
        return (sum == x);
    }
 
    // Driver Code
    public static void Main()
    {
        GFG ob = new GFG();
        int x = 153;
        Console.WriteLine(ob.isArmstrong(x));
        x = 1253;
        Console.WriteLine(ob.isArmstrong(x));
    }
}
 
// This code is contributed by Nitin Mittal.

Javascript




<script>
 
    // JavaScript program to determine whether the
    // number is Armstrong number or not
     
    // Function to calculate x raised
    // to the power y
    function power(x, y)
    {
        if( y == 0)
            return 1;
        if (y % 2 == 0)
            return power(x, parseInt(y / 2, 10)) *
                   power(x, parseInt(y / 2, 10));
                      
        return x * power(x, parseInt(y / 2, 10)) *
                   power(x, parseInt(y / 2, 10));
    }
   
    // Function to calculate
    // order of the number
    function order(x)
    {
        let n = 0;
        while (x != 0)
        {
            n++;
            x = parseInt(x / 10, 10);
        }
        return n;
    }
   
    // Function to check whether the
    // given number is Armstrong number
    // or not
    function isArmstrong(x)
    {
           
        // Calling order function
        let n = order(x);
        let temp = x, sum = 0;
        while (temp != 0)
        {
            let r = temp % 10;
            sum = sum + power(r, n);
            temp = parseInt(temp / 10, 10);
        }
   
        // If satisfies Armstrong condition
        return (sum == x);
    }
     
    let x = 153;
    if(isArmstrong(x))
    {
        document.write("True" + "</br>");
    }
    else{
        document.write("False" + "</br>");
    }
    x = 1253;
    if(isArmstrong(x))
    {
        document.write("True");
    }
    else{
        document.write("False");
    }
 
</script>

Output

true
false

The above approach can also be implemented in a shorter way as:

C++




#include <iostream>
using namespace std;
 
int main() {
          int n = 153;
        int temp = n;
        int p = 0;
 
        /*function to calculate
          the sum of individual digits
         */
        while (n > 0) {
 
            int rem = n % 10;
            p = (p) + (rem * rem * rem);
            n = n / 10;
        }
 
        /* condition to check whether
           the value of P equals
           to user input or not. */
          if (temp == p) {
            cout<<("Yes. It is Armstrong No.");
        }
        else {
            cout<<("No. It is not an Armstrong No.");
        }
    return 0;
}
 
// This code is contributed by sathiyamoorthics19

C




#include <stdio.h>
 
int main() {
          int n = 153;
        int temp = n;
        int p = 0;
 
        /*function to calculate
          the sum of individual digits
         */
        while (n > 0) {
 
            int rem = n % 10;
            p = (p) + (rem * rem * rem);
            n = n / 10;
        }
 
        /* condition to check whether
           the value of P equals
           to user input or not. */
          if (temp == p) {
            printf("Yes. It is Armstrong No.");
        }
        else {
            printf("No. It is not an Armstrong No.");
        }
    return 0;
}
 
// This code is contributed by sathiyamoorthics19

Java




// Java program to determine whether the number is
// Armstrong number or not
 
public class ArmstrongNumber {
    public static void main(String[] args)
    {
 
        int n = 153;
        int temp = n;
        int p = 0;
 
        /*function to calculate
          the sum of individual digits
         */
        while (n > 0) {
 
            int rem = n % 10;
            p = (p) + (rem * rem * rem);
            n = n / 10;
        }
 
        /* condition to check whether
           the value of P equals
           to user input or not. */
        if (temp == p) {
            System.out.println("Yes. It is Armstrong No.");
        }
        else {
            System.out.println(
                "No. It is not an Armstrong No.");
        }
    }
}

Output

Yes. It is Armstrong No.

Find nth Armstrong number 

Input  : 9

Output : 9

Input  : 10

Output : 153

C++




// C++ Program to find
// Nth Armstrong Number
#include <bits/stdc++.h>
#include <math.h>
using namespace std;
 
// Function to find Nth Armstrong Number
int NthArmstrong(int n)
{
    int count = 0;
 
    // upper limit from integer
    for (int i = 1; i <= INT_MAX; i++) {
        int num = i, rem, digit = 0, sum = 0;
 
        // Copy the value for num in num
        num = i;
 
        // Find total digits in num
        digit = (int)log10(num) + 1;
 
        // Calculate sum of power of digits
        while (num > 0) {
            rem = num % 10;
            sum = sum + pow(rem, digit);
            num = num / 10;
        }
        // Check for Armstrong number
        if (i == sum)
            count++;
        if (count == n)
            return i;
    }
}
 
// Driver Function
int main()
{
    int n = 12;
    cout << NthArmstrong(n);
    return 0;
}
 
// This Code is Contributed by 'jaingyayak'

Java




// Java Program to find
// Nth Armstrong Number
import java.lang.Math;
 
class GFG {
 
    // Function to find Nth Armstrong Number
    static int NthArmstrong(int n)
    {
        int count = 0;
 
        // upper limit from integer
        for (int i = 1; i <= Integer.MAX_VALUE; i++) {
            int num = i, rem, digit = 0, sum = 0;
 
            // Copy the value for num in num
            num = i;
 
            // Find total digits in num
            digit = (int)Math.log10(num) + 1;
 
            // Calculate sum of power of digits
            while (num > 0) {
                rem = num % 10;
                sum = sum + (int)Math.pow(rem, digit);
                num = num / 10;
            }
 
            // Check for Armstrong number
            if (i == sum)
                count++;
            if (count == n)
                return i;
        }
        return n;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int n = 12;
        System.out.println(NthArmstrong(n));
    }
}
 
// This code is contributed by Code_Mech.

Python3




# Python3 Program to find Nth Armstrong Number
import math
import sys
 
# Function to find Nth Armstrong Number
 
 
def NthArmstrong(n):
 
    count = 0
 
    # upper limit from integer
    for i in range(1, sys.maxsize):
 
        num = i
        rem = 0
        digit = 0
        sum = 0
 
        # Copy the value for num in num
        num = i
 
        # Find total digits in num
        digit = int(math.log10(num) + 1)
 
        # Calculate sum of power of digits
        while(num > 0):
            rem = num % 10
            sum = sum + pow(rem, digit)
            num = num // 10
 
        # Check for Armstrong number
        if(i == sum):
            count += 1
        if(count == n):
            return i
 
 
# Driver Code
n = 12
print(NthArmstrong(n))
 
# This code is contributed by chandan_jnu

C#




// C# Program to find
// Nth Armstrong Number
using System;
 
class GFG {
 
    // Function to find Nth Armstrong Number
    static int NthArmstrong(int n)
    {
        int count = 0;
 
        // upper limit from integer
        for (int i = 1; i <= int.MaxValue; i++) {
            int num = i, rem, digit = 0, sum = 0;
 
            // Copy the value for num in num
            num = i;
 
            // Find total digits in num
            digit = (int)Math.Log10(num) + 1;
 
            // Calculate sum of power of digits
            while (num > 0) {
                rem = num % 10;
                sum = sum + (int)Math.Pow(rem, digit);
                num = num / 10;
            }
 
            // Check for Armstrong number
            if (i == sum)
                count++;
            if (count == n)
                return i;
        }
        return n;
    }
 
    // Driver Code
    public static void Main()
    {
        int n = 12;
        Console.WriteLine(NthArmstrong(n));
    }
}
 
// This code is contributed by Code_Mech.

PHP




<?php
// PHP Program to find
// Nth Armstrong Number
 
// Function to find
// Nth Armstrong Number
function NthArmstrong($n)
{
    $count = 0;
     
    // upper limit
    // from integer
    for($i = 1;
        $i <= PHP_INT_MAX; $i++)
    {
        $num = $i;
        $rem;
        $digit = 0;
        $sum = 0;
         
        // Copy the value
        // for num in num
        $num = $i;
         
        // Find total
        // digits in num
        $digit = (int) log10($num) + 1;
         
        // Calculate sum of
        // power of digits
        while($num > 0)
        {
            $rem = $num % 10;
            $sum = $sum + pow($rem,
                              $digit);
            $num = (int)$num / 10;
        }
         
        // Check for
        // Armstrong number
        if($i == $sum)
            $count++;
        if($count == $n)
            return $i;
    }
}
 
// Driver Code
$n = 12;
echo NthArmstrong($n);
 
// This Code is Contributed
// by akt_mit
?>

Javascript




<script>
 
// Javascript program to find Nth Armstrong Number
 
// Function to find Nth Armstrong Number
function NthArmstrong(n)
{
    let count = 0;
 
    // Upper limit from integer
    for(let i = 1; i <= Number.MAX_VALUE; i++)
    {
        let num = i, rem, digit = 0, sum = 0;
 
        // Copy the value for num in num
        num = i;
 
        // Find total digits in num
        digit = parseInt(Math.log10(num), 10) + 1;
 
        // Calculate sum of power of digits
        while(num > 0)
        {
            rem = num % 10;
            sum = sum + Math.pow(rem, digit);
            num = parseInt(num / 10, 10);
        }
 
        // Check for Armstrong number
        if (i == sum)
            count++;
        if (count == n)
            return i;
    }
    return n;
}
 
// Driver code
let n = 12;
 
document.write(NthArmstrong(n));
 
// This code is contributed by rameshtravel07  
 
</script>

C




// C Program to find
// Nth Armstrong Number
#include <stdio.h>
#include <math.h>
#include<limits.h>
 
// Function to find Nth Armstrong Number
int NthArmstrong(int n)
{
    int count = 0;
 
    // upper limit from integer
    for (int i = 1; i <= INT_MAX; i++) {
        int num = i, rem, digit = 0, sum = 0;
 
        // Copy the value for num in num
        num = i;
 
        // Find total digits in num
        digit = (int)log10(num) + 1;
 
        // Calculate sum of power of digits
        while (num > 0) {
            rem = num % 10;
            sum = sum + pow(rem, digit);
            num = num / 10;
        }
        // Check for Armstrong number
        if (i == sum)
            count++;
        if (count == n)
            return i;
    }
}
 
// Driver Function
int main()
{
    int n = 12;
    printf("%d", NthArmstrong(n));
    return 0;
}
 
// This Code is Contributed by
//'sathiyamoorthics19'

Output

371

Using Numeric Strings:

When considering the number as a string we can access any digit we want and perform operations

Java




public class armstrongNumber
{
 
    public void isArmstrong(String n)
    {
 
        char[] s = n.toCharArray();
        int size = s.length;
        int sum = 0;
 
        for (char num : s)
        {
            int temp = 1;
 
            int i
                = Integer.parseInt(Character.toString(num));
 
            for (int j = 0; j <= size - 1; j++)
            {
                temp *= i;
            }
 
            sum += temp;
        }
 
        if (sum == Integer.parseInt(n))
        {
            System.out.println("True");
        }
 
        else
        {
            System.out.println("False");
        }
    }
 
    public static void main(String[] args)
    {
 
        armstrongNumber am = new armstrongNumber();
        am.isArmstrong("153");
        am.isArmstrong("1253");
    }
}

Python3




def armstrong(n):
    number = str(n)
 
    n = len(number)
    output = 0
    for i in number:
        output = output+int(i)**n
 
    if output == int(number):
        return(True)
    else:
        return(False)
 
 
print(armstrong(153))
print(armstrong(1253))

C#




using System;
public class armstrongNumber {
    public void isArmstrong(String n)
    {
        char[] s = n.ToCharArray();
        int size = s.Length;
        int sum = 0;
        foreach(char num in s)
        {
            int temp = 1;
            int i = Int32.Parse(char.ToString(num));
            for (int j = 0; j <= size - 1; j++) {
                temp *= i;
            }
            sum += temp;
        }
        if (sum == Int32.Parse(n)) {
            Console.WriteLine("True");
        }
        else {
            Console.WriteLine("False");
        }
    }
 
    public static void Main(String[] args)
    {
        armstrongNumber am = new armstrongNumber();
        am.isArmstrong("153");
        am.isArmstrong("1253");
    }
}
 
// This code is contributed by umadevi9616

Javascript




<script>
function armstrong(n){
    let number = new String(n)
 
    n = number.length
    let output = 0
    for(let i of number)
      output = output + parseInt(i)**n
 
    if (output == parseInt(number))
        return("True" + "<br>")
    else
        return("False" + "<br>")
}
         
document.write(armstrong(153))
document.write(armstrong(1253))
 
// This code is contributed by _saurabh_jaiswal.
</script>

Output

True
False

Time Complexity: O(n).
Auxiliary Space: O(1).

References: 
http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/chap04/arms.html 
http://www.programiz.com/c-programming/examples/check-armstrong-number
 

This article is contributed by Rahul Agrawal .If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!