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: Sí
153 es un número de Armstrong.
1*1*1 + 5*5*5 + 3*3*3 = 153
Entrada: 120
Salida: Sí
120 no es un número de Armstrong.
1*1*1 + 2*2*2 + 0*0*0 = 9
Entrada: 1253
Salida: Sí
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: Sí
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 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; }
true false
Complejidad del tiempo: O(logx*log(logx))
Espacio Auxiliar: O(1)
El enfoque anterior también se puede implementar de una manera más corta como:
C
// C program to implement // the above approach #include <stdio.h> // Driver code 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
Yes. It is Armstrong No.
Complejidad de tiempo: O (logn)
Espacio Auxiliar: O(1)
¡ Consulte el artículo completo sobre Programa para números de Armstrong para obtener más detalles!
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