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

C语言实现快乐数判断功能失败,测试用例7等场景返回结果异常

程序在输入为‘快乐数’时返回1,否则返回0。本题对快乐数的定义为:各位数字平方和构成的序列最终收敛到1的数;反之,序列收敛到0的数为非快乐数。

代码问题分析

你的代码存在4个核心问题,直接导致运行结果不符合预期:

  • 逻辑理解错误,多余计算了单数字平方的各位平方和
    快乐数的计算规则是对当前完整数字,计算所有位的平方和,再将这个和作为新数字重复计算,直到出现1或4,不需要对单个数字的平方再拆位计算平方和。
    以输入7为例:
    正确流程:7 → 7²=49 → 4²+9²=97 → 9²+7²=130 → 1²+3²+0²=10 → 1²+0²=1,最终返回1
    你的代码流程:取出7 → 算7²=49 → 拆49计算4²+9²=97 → 直接结束,sum_2=97既不是1也不是4,结果错误
  • 缺失迭代逻辑
    你的代码只会对初始输入做一次处理,没有将计算得到的平方和作为新的输入重复计算,自然得不到最终收敛的1或4
  • 函数存在未定义行为
    当sum_2既不等于1也不等于4时,happy函数没有返回语句,C语言中这种情况会返回随机值,结果不可控
  • 存在冗余变量
    你定义的sum、i变量全程没有使用,属于无效代码
修正代码

如果你希望简化嵌套的迭代逻辑,只保留一层迭代循环,可以参考如下实现:

int happy(unsigned int num) {
    if (num == 0) {
        return 0; 
    }
    unsigned int sum;
    // 外层只有一层迭代循环,直到结果收敛到1或4
    while (num != 1 && num != 4) {
        sum = 0;
        // 内层仅做单轮平方和计算,不属于迭代逻辑嵌套
        for (unsigned int tmp = num; tmp > 0; tmp /= 10) {
            unsigned int digit = tmp % 10;
            sum += digit * digit;
        }
        num = sum;
    }
    return num == 1 ? 1 : 0;
}

主函数无需修改即可正常运行所有测试用例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:24:11