📜  Lex程序检查给定数字是否为阿姆斯壮数字(1)

📅  最后修改于: 2023-12-03 15:17:19.125000             🧑  作者: Mango

Lex程序检查给定数字是否为阿姆斯壮数字

简介

本程序用于检查给定的数字是否为阿姆斯壮数字。阿姆斯壮数字是一个 n 位数,它的每个数字的 n 次幂之和等于它本身。

例如,153 是一个阿姆斯壮数字,因为 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153。

程序接受一个整数作为输入,并返回一个布尔值表示输入数字是否为阿姆斯壮数字。如果是阿姆斯壮数字,则返回 true,否则返回 false。

输入格式

程序接受一个整数作为输入。输入数字可以是任意整数。

输出格式

程序返回一个布尔值,表示输入数字是否为阿姆斯壮数字。如果是阿姆斯壮数字,则返回 true,否则返回 false。

示例代码
%{
#include <stdlib.h>
#include <stdbool.h>
%}

%%
{DIGIT}+   { if (isArmstrong(yytext)) return true; }
\n         {}
.          {}

%%
int isArmstrong(char* number) {
    int length = strlen(number);
    int sum = 0;
    for (int i = 0; i < length; i++) {
        int digit = number[i] - '0';
        sum += pow(digit, length);
    }
    return sum == atoi(number);
}

int main() {
    char number[100];
    printf("请输入一个整数:");
    fgets(number, sizeof(number), stdin);
    if (isArmstrong(number)) {
        printf("是阿姆斯壮数字\n");
    } else {
        printf("不是阿姆斯壮数字\n");
    }
    return 0;
}

这是一个使用 Lex 编写的程序,用于检查给定的数字是否为阿姆斯壮数字。程序通过逐个计算每个数字的 n 次幂之和,并与输入的整数进行比较,判断是否为阿姆斯壮数字。如果是,则输出 "是阿姆斯壮数字",否则输出 "不是阿姆斯壮数字"。

请注意,上述示例代码中使用了 C 语言来实现阿姆斯壮数字的检查逻辑和输入输出功能。您可以根据需要将 Lex 生成的代码与您的项目整合使用。