Programa Lex para verificar si el número dado es un número armstrong o no

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

Deja una respuesta

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