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

为何函数处理含前导零的数字时失效?如何修正以统计0011的偶数位?

统计偶数位代码的问题与解决

核心问题根源

你传入的0011在C语言中会被解析为八进制整数,而非十进制的11或四位数字0011。八进制的0011转换为十进制是9,所以你的函数实际处理的是数字9,自然得不到结果2。另外,整数类型本身会忽略前导零,无法保留原始输入的位数信息——比如00会被直接当作十进制的0存储,这也是“两个零时无法正常工作”的原因。

解决方案:改用字符串处理

要保留前导零并正确统计每一位的偶数个数,必须将输入作为字符串传入(而非整数)。这种方法无需额外库,逻辑简单直接:

#include <stdio.h>

int evensDigitsCount(const char* numStr);

int main()
{
    int res = evensDigitsCount("0011");
    printf("Counter: %d\n", res);
    return 0;
}

int evensDigitsCount(const char* numStr)
{
    int count = 0;
    // 遍历字符串直到结束符
    for (int i = 0; numStr[i] != '\0'; i++)
    {
        // 将字符转为对应的数字值
        int digit = numStr[i] - '0';
        if (digit % 2 == 0)
        {
            count++;
        }
    }
    return count;
}

关键说明

  • 为什么用字符串?
    字符串可以完整保留输入的每一位字符(包括前导零),不会像整数那样被自动转换进制或忽略前导零。
  • 简单性验证
    上述代码仅用一个基础for循环,无复杂逻辑,也未依赖任何额外库(仅用标准stdio.h),完全符合“简单解决方案”的要求。
  • 关于双零的问题
    如果传入字符串"00",函数会遍历两个字符,每个字符转成数字0,统计得到2,完全符合预期。之前用整数传参时,00被当作单个0处理,自然只能统计出1个偶数位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:10:35