Programa para Números de Armstrong

Dado un número x , determine si el número dado es el número de Armstrong o no. 

Un entero positivo de n dígitos se denomina número de Armstrong de orden n (el orden es el número de dígitos) si. 

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

Ejemplo: 

Entrada : 153

Salida :

153 es un número de Armstrong.

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

Entrada : 120

Salida :

120 no es un número de Armstrong.

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

Entrada: 1253

Salida :

1253 no es un número de Armstrong

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

Entrada: 1634

Salida :

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

Enfoque: La idea es primero contar los dígitos de los números (o encontrar el orden). Sea n el número de dígitos. Para cada dígito r en el número de entrada x, calcule r n . Si la suma de todos estos valores es igual a n, devuelve verdadero, de lo contrario, falso.

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>
Producción

true
false

El enfoque anterior también se puede implementar de una manera más corta como:

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.");
        }
    }
}
Producción

Yes. It is Armstrong No.

Encuentra el número n de Armstrong 

Entrada : 9

Salida : 9

Entrada : 10

Salida : 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'
Producción

371

Uso de strings numéricas:

Al considerar el número como una string, podemos acceder a cualquier dígito que queramos y realizar operaciones

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>
Producción

True
False

Complejidad temporal: O(n).
Espacio Auxiliar: O(1).

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

Este artículo es una contribución de Rahul Agrawal . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *