Given a number x, determine whether the given number is Armstrong’s number or not.
A positive integer of n digits is called an Armstrong number of order n (order is the 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 = 153Input: 120
Output: No
120 is not a Armstrong number.
1*1*1 + 2*2*2 + 0*0*0 = 9Input: 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 = 723Input: 1634
Output: Yes
1*1*1*1 + 6*6*6*6 + 3*3*3*3 + 4*4*4*4 = 1634
Naive Approach
The idea is to first count the number of digits (or find the order).
Algorithm:
- Let the number of digits be n.
- For every digit r in input number x, compute rn.
- If the sum of all such values is equal to x, then return true, else false.
Below is the program to check whether the number is an Armstrong number or not:
// 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 Code int main()
{ int x = 153;
cout << boolalpha << isArmstrong(x) << endl;
x = 1253;
cout << boolalpha << isArmstrong(x) << endl;
return 0;
} |
// 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 Code 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 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 Code
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));
}
} |
# 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 ))
|
# 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))
|
// 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. |
<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> |
true false
Find nth Armstrong Number
Input: 9
Output: 9Input: 10
Output: 153
Below is the program to find the nth Armstrong number:
// 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 Code int main()
{ int n = 12;
cout << NthArmstrong(n);
return 0;
} // This Code is Contributed by 'jaingyayak' |
// C Program to find // Nth Armstrong Number #include <limits.h> #include <math.h> #include <stdio.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 Code int main()
{ int n = 12;
printf ( "%d" , NthArmstrong(n));
return 0;
} // This Code is Contributed by 'sathiyamoorthics19' |
// 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 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# 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. |
<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> |
<?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 ?> |
371
Time complexity: O(log n)
Auxiliary Space: O(1)
Using Numeric Strings
When considering the number as a string we can access any digit we want and perform operations. Below is the program to implement the above approach:
// C++ program to check whether the // number is Armstrong number or not #include <bits/stdc++.h> using namespace std;
string armstrong( int n)
{ string number = to_string(n);
n = number.length();
long long output = 0;
for ( char i : number)
output = output + ( long ) pow ((i - '0' ), n);
if (output == stoll(number))
return ( "True" );
else
return ( "False" );
} // Driver Code int main()
{ cout << armstrong(153) << endl;
cout << armstrong(1253) << endl;
} // This code is contributed by phasing17 |
// Java program to check whether the // number is Armstrong number or not 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" );
}
}
// Driver Code
public static void main(String[] args)
{
armstrongNumber am = new armstrongNumber();
am.isArmstrong( "153" );
am.isArmstrong( "1253" );
}
} |
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 ))
|
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 |
<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> |
True False
Time Complexity: O(n).
Auxiliary Space: O(1).
Find all Armstrong Numbers in a Range
Below is the program to find all Armstrong numbers in a given range:
// C++ program to find all Armstrong numbers // in a given range #include <bits/stdc++.h> using namespace std;
void isArmstrong( int left, int right)
{ for ( int i = left; i <= right; i++) {
int sum = 0;
int temp = i;
while (temp > 0) {
// Finding the lastdigit
int lastdigit = temp % 10;
// Finding the sum
sum += pow (lastdigit, 3);
temp /= 10;
}
// Condition to print the number if
// it is armstrong number
if (sum == i) {
cout << i << " " ;
}
}
cout << endl;
} // Driver code int main()
{ int left = 5, right = 1000;
isArmstrong(left, right);
return 0;
} // This code is contributed by 525tamannacse11 |
// Java program to find all Armstrong numbers // in a given range // Importing necessary libraries import java.util.*;
public class Main {
public static void isArmstrong( int left, int right)
{
for ( int i = left; i <= right; i++) {
int sum = 0 ;
int temp = i;
while (temp > 0 ) {
// Finding the last digit
int lastdigit = temp % 10 ;
// Finding the sum
sum += Math.pow(lastdigit, 3 );
temp /= 10 ;
}
// Condition to print the number if it
// is an Armstrong number
if (sum == i) {
System.out.print(i + " " );
}
}
System.out.println();
}
// Driver code
public static void main(String[] args)
{
int left = 5 , right = 1000 ;
isArmstrong(left, right);
}
} |
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 )
arm_list = []
nums = range ( 10 , 1000 )
for i in nums:
if armstrong(i):
arm_list.append(i)
else :
pass
print (arm_list)
|
using System;
class MainClass {
static void isArmstrong( int left, int right)
{
for ( int i = left; i <= right; i++) {
int sum = 0;
int temp = i;
while (temp > 0) {
// finding the lastdigit
int lastdigit = temp % 10;
// finding the sum
sum += ( int )Math.Pow(lastdigit, 3);
temp /= 10;
}
/* Condition to print the number if it is
* armstrong number */
if (sum == i) {
Console.Write(i + " " );
}
}
Console.WriteLine();
}
public static void Main( string [] args)
{
int left = 5, right = 1000;
isArmstrong(left, right);
}
} |
// JavaScript code to implement the approach function isArmstrong(left, right) {
for (let i = left; i <= right; i++) {
let sum = 0;
let temp = i;
while (temp > 0) {
// finding the lastdigit
let lastdigit = temp % 10;
// finding the sum
sum += Math.pow(lastdigit, 3);
temp = Math.floor(temp / 10);
}
/* Condition to print the number if it is armstrong number */
if (sum === i) {
process.stdout.write(i + " " );
}
}
console.log( "\n" );
} // Driver code let left = 5, right = 1000;
isArmstrong(left, right); // This code is contributed by phasing17 |
153 370 371 407
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 .