# Armstrong Number

Difficulty Level Medium
MathViews 329

## Problem Statement

Let a number x containing n digits. If sum of each digit raised to power n is equal to the number itself, then the number is said to be armstrong number i.e.

abc… = pow(a, n) + pow(b, n) + pow(c, n) + ……

## Write a program to check Armstrong Number

### Example

`153`
`Yes`

Explanation: 13 + 53 + 33

= 1 + 125 + 27

=153  Therefore, 153 is an armstrong number.

`1634`
`Yes`
`123`
`No`

### Algorithm

```1. Initialize an integer variable n.
2. Create a function to check the armstrong number which accepts an integer variable as it's parameter.
3. Find the length of the number.
4. Iterate while the number is greater than 0, mod number with 10. Find the digit's power n and add to sum. Divide the number by 10.
5. Check if sum and original number are equal or not.
6. If yes, Print "Yes".
7. Else print "No".```

### Complexity Analysis

Time Complexity:

O(log(n)*log(log(n)) where n is the number of digits in the given integer variable because we are finding exponentiation for all the digits of numbers.

Space Complexity:

O(1) because we used constant space.

### C++ program

```#include<bits/stdc++.h>
using namespace std;

int expo(int a, int b){
int res = 1;
while(b>0){
if(b&1)
res = res*a;
a = a*a;
b = b>>1;
}
return res;
}

bool checkArmstrong(int x){
int l = 0, n = x;
while(n){
l++;
n = n/10;
}
int sum=0;
n = x;
while(n){
int digit = n%10;
sum += expo(digit, l);
n = n/10;
}
return(sum == x);
}

int main(){
int n = 153;
if(checkArmstrong(n))
cout<<"Yes";
else
cout<<"No";
return 0;
}
```
`Yes`

### Java program

```import java.lang.Math;
class Armstrong{

boolean checkArmstrong(int x){
int l = 0, n = x;
while(n!=0){
l++;
n = n/10;
}
int sum=0;
int num = x;
while(num!=0){
int digit = num%10;
sum += Math.pow(digit, l);
num = num/10;
}
return(sum == x);
}

public static void main(String[] args){
Armstrong a = new Armstrong();
int n = 153;
if(a.checkArmstrong(n))
System.out.println("Yes");
else
System.out.println("No");
}
}```
`Yes`

## Write a program to find n’th armstrong number.

Example:

`11`
`370`

Explanation: 11th Armstrong number is 370.

`15`
`8208`

### Algorithm

1. Initialise an integer variable n.

2. Create a function to check the armstrong number which accepts an integer variable as it’s parameter.

3. Iterate over an integer stating from 1. Mod number with 10 to get the last digit. Find the digit’s power n and add to sum.

4. Divide the number by 10.

5. Check if sum is equal to current iterating number, increment the count.

6. If count is equal to n, return current iterating number.

Time Complexity:

O(log(n)*log(log(n)) where n is the number of digits in the given integer variable.

Space Complexity:

O(1) because we used constant extra space.

### C++ program

```#include<bits/stdc++.h>
using namespace std;

int expo(int a, int b){
int res = 1;
while(b>0){
if(b&1)
res = res*a;
a = a*a;
b = b>>1;
}
return res;
}

int nthArmstrong(int n){
int count=0;

for(int i=1; i<=INT_MAX; i++){
int num=i, rem, digit=0, sum=0;

digit =(int)log10(num)+1;

while(num>0){
rem = num % 10;
sum = sum + expo(rem,digit);
num = num / 10;
}
if(i == sum)
count++;
if(count==n)
return i;
}
}

int main(){
int n = 15;
cout<<nthArmstrong(n);
return 0;
}
```
`8208`

### Java program

```import java.lang.Math;

class Armstrong{

static int nthArmstrong(int n){
int count = 0;

for(int i=1; i<=Integer.MAX_VALUE; i++){
int num = i, rem, digit = 0, sum = 0;

digit = (int) Math.log10(num) + 1;

while(num > 0){
rem = num % 10;
sum = sum + (int)Math.pow(rem, digit);
num = num / 10;
}

if(i == sum)
count++;
if(count == n)
return i;
}
return n;
}

public static void main(String[] args){
int n = 15;
System.out.println(nthArmstrong(n));
}
}```
`8208`

Translate »