Problema: programa Lex para verificar si el número dado es un número armstrong o no.
Explicación:
Lex es un programa de computadora que genera analizadores léxicos y fue escrito por Mike Lesk y Eric Schmidt. Lex lee un flujo de entrada que especifica el analizador léxico y genera el código fuente que implementa el lexer en el lenguaje de programación C.
Descripción:
Un número de Armstrong es un número que es la suma de sus propios dígitos, cada uno elevado a la potencia del número de dígitos. Por ejemplo, 153 es un número de Armstrong,
(1^3) + (5^3) + (3^3) = 153
Ejemplos:
Input: 153 Output: 153 is a Armstrong number Input: 250 Output: 250 is not a Armstrong number
Implementación:
/* Lex program to check whether given - number is armstrong number or not */ % { /* Definition section */ #include <math.h> #include <string.h> void check(char*); % } /* Rule Section */ % % [0 - 9] + check(yytext); % % int main() { /* yyin as pointer of File type */ extern FILE* yyin; yyin = fopen("num", "r"); // The function that starts the analysis yylex(); return 0; } void check(char* a) { int len = strlen(a), i, num = 0; for (i = 0; i < len; i++) num = num * 10 + (a[i] - '0'); int x = 0, y = 0, temp = num; while (num > 0) { y = pow((num % 10), len); x = x + y; num = num / 10; } if (x == temp) printf("%d is armstrong number \n", temp); else printf("%d is not armstrong number\n", temp); }
Producción:
Publicación traducida automáticamente
Artículo escrito por thakur_aman y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA