You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言非e-ban数字筛选的判定算法与实现方法问询

e-ban数字判定算法

核心判定规则非常明确:将整数转换为标准英文拼写后,只要拼写内容包含字母"e",就属于需要被过滤的e-ban数字,否则保留。
不需要真的生成完整英文拼写再查找字符,直接基于英文数字的构词规律提前打表判断即可,效率更高也不容易出错:

  • 所有负数的英文以negative开头,单词本身含e,直接判定为e-ban数字
  • 英文数字按三位为一组拆分(对应千、百万、十亿等单位),只要任意一组的拼写含e,整个数字就属于e-ban数字
  • 三位组内部的构词规律固定:
    • 0-19的拼写是不规则的,提前打表记录每个数的英文是否含e即可
    • 20-99的拼写为「整十词 + 个位词」(个位为0时省略个位词),提前打表记录20/30/.../90每个整十词是否含e,再结合个位的表判断即可
    • 100-999的拼写会用到hundred这个词,单词本身含e,因此只要三位组的百位不为0,整个组直接判定为含e
  • 千(thousand)、百万(million)、十亿(billion)等位的单位词本身不含e,不需要额外判定,只要对应三位组的内容不含e即可
C语言实现步骤
  • 先编写独立的判定函数,输入一个整数,返回值为1表示该数是非e-ban数字(需要保留),返回0表示是e-ban数字(需要过滤)
  • 提前定义两个静态常量数组存映射表,避免重复计算:
    • small_has_e[20]:索引对应0-19的整数,值为1表示该数英文含e,0表示不含
    • tens_has_e[10]:索引对应十位上的数字(2-9对应20/30/.../90),值为1表示对应整十词含e,0表示不含
  • 主函数循环读取用户输入的整数,直到输入结束,逐个调用判定函数,把符合要求的数字按空格分隔输出即可
完整可运行代码
#include <stdio.h>

// 0-19的数字英文是否含e,索引对应数字,1=含e,0=不含
const int small_has_e[] = {1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1};
// 20/30/.../90的英文是否含e,索引对应十位数字,1=含e,0=不含
const int tens_has_e[] = {0,0,1,0,0,0,0,1,1,1};

int is_eban(long long num) {
    // 负数带negative前缀,含e直接过滤
    if (num < 0) return 0;
    // 0对应zero,含e直接过滤
    if (num == 0) return 0;

    // 按三位一组逐段判断
    while (num > 0) {
        int group = num % 1000;
        int hundred = group / 100;
        int rem = group % 100;

        // 百位不为0必然用到hundred,单词本身含e
        if (hundred > 0) return 0;

        // 判断后两位是否含e
        if (rem < 20) {
            if (small_has_e[rem]) return 0;
        } else {
            int ten = rem / 10;
            int one = rem % 10;
            if (tens_has_e[ten]) return 0;
            if (one > 0 && small_has_e[one]) return 0;
        }

        num = num / 1000;
    }
    return 1;
}

int main() {
    long long n;
    int first_flag = 1; // 控制输出空格格式,避免行首多余空格
    while (scanf("%lld", &n) != EOF) {
        if (is_eban(n)) {
            if (!first_flag) printf(" ");
            printf("%lld", n);
            first_flag = 0;
        }
    }
    printf("\n");
    return 0;
}

代码验证符合示例要求:输入序列4 44 1001 164 29时,输出结果为4 44,和参考结果完全一致。

内容的提问来源于stack exchange,提问作者Kaizer04

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:27:23