Program for Armstrong Numbers

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

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 << isArmstrong(x) << endl;
    x = 1253;
    cout << isArmstrong(x) << endl;
    return 0;
}

chevron_right


C

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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));
    }
}

chevron_right


Python

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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))

chevron_right


Output:

1
0

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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(100))
  
print(isArmstrong(153))
  
# Get all the Armstrong number in range(1000)
print([ _ for _ in range(1000) if isArmstrong(_)])

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right



Output:

True
False

Find nth Armstrong number

Input  : 9
Output : 9

Input  : 10
Output : 153

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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'

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right




Output:

371


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 contribute.geeksforgeeks.org or mail your article to contribute@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