📜  Lex程序检查完美数字

📅  最后修改于: 2021-05-28 04:56:43             🧑  作者: Mango

Lex是一个生成词法分析器的计算机程序,由Mike Lesk和Eric Schmidt编写。 Lex读取指定词法分析器的输入流,并输出以C编程语言实现词法分析器的源代码。

说明:完美数,一个等于其适当除数之和的正整数,例如:6 = 1 + 2 + 3。

例子:

Input: 3
Output: 3 is not perfect number

Input: 6
Output: 6 is perfect number 

执行:

/*Lex program to check perfect numbers*/
  
%
{
#include 
    void check(char*);
    %
}
  
/*Rule Section*/
% %
        [0 - 9]
    + check(yytext);
% % int main()
{
    // the input stream pointer
    extern FILE* yyin;
  
    // open a file handle to a particular file
    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, temp = num;
    for (i = 1; i < num; i++) {
        if (num % i == 0)
            x = x + i;
    }
    if (x == temp)
        printf("%d is perfect number \n", num);
  
    else
        printf("%d is not perfect number \n", num);
}

输出:

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。