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

C语言实现数字各位求和与数位匹配函数的代码错误排查

需求说明

实现一个以int func(int num1, int num2)为开头的函数,实现过程不允许使用数组,功能如下:

  • 接收两个整型参数num1、num2,返回整型结果
  • 第一步计算num2的各位数字之和
  • 第二步判断该和值是否作为连续数字片段存在于num1的数位序列中,存在返回1,不存在返回0
  • 匹配示例:num1 = 51749,num2 = 566时,num2各位和为5+6+6=17,num1数位序列中存在连续片段17,符合匹配条件,返回1
原代码问题排查

你写的代码存在以下几个核心问题,导致运行不符合预期:

  • 核心逻辑偏离需求:第一个循环错误计算了num1的所有数位之和,需求不需要计算num1的数位总和,而是需要提取num1不同位置的连续数位片段,和num2的数位和做比对
  • 运算符使用错误:条件判断里写的sum =! num2是非法逻辑,=!是赋值+逻辑非操作,不是不等判断运算符!=;且执行到该判断时num2已经被前一个循环除到0,判断完全没有意义
  • 函数缺失返回值:func声明为返回int类型,但整个函数内没有return语句,main函数无法拿到正确的判断结果
  • 存在无效冗余代码:while (ad < 10)的循环和功能实现完全无关,属于无效逻辑
  • 输出逻辑冲突:func内部直接打印提示文本,和main函数里的Yes/No打印逻辑冲突,会导致输出内容混乱;且main中连续两次调用func,属于无意义的性能损耗
修正后可运行代码
#include <stdio.h>
#include <stdlib.h>

int func(int num1, int num2) {
    // 处理负数,数位计算取绝对值
    num1 = abs(num1);
    num2 = abs(num2);
    
    int sum2 = 0;
    int digit;
    // 计算num2的各位数字之和
    while (num2 > 0) {
        digit = num2 % 10;
        sum2 += digit;
        num2 /= 10;
    }

    // 特殊处理sum为0的场景(即num2输入为0)
    if (sum2 == 0) {
        while (num1 > 0) {
            if (num1 % 10 == 0) return 1;
            num1 /= 10;
        }
        return 0;
    }

    // 计算sum2的位数,生成对应取模基数
    int temp = sum2;
    int div = 1;
    while (temp > 0) {
        div *= 10;
        temp /= 10;
    }

    // 逐段提取num1的连续数位做匹配,全程不使用数组
    while (num1 >= sum2) {
        int segment = num1 % div;
        if (segment == sum2) {
            return 1;
        }
        num1 /= 10;
    }

    // 遍历完无匹配返回0
    return 0;
}

int main() {
    int a, b;
    printf("Type the first number ");
    scanf("%d", &a);
    printf("Type the second number ");
    scanf("%d", &b);
    int res = func(a, b);
    printf(res == 1 ? "Yes" : "No");
    return 0;
}
实现逻辑说明
  • 数位和计算:通过逐次模10取末尾数字累加,再除10移除末尾数字的方式,计算得到num2的数位和
  • 匹配基数生成:根据sum2的位数生成10的n次幂作为取模值,比如sum2是两位数就生成100,模100就能得到数字末尾连续两位的数值
  • 连续片段匹配:每次取num1末尾和sum2相同长度的连续片段做相等判断,匹配到直接返回1;未匹配则将num1除10右移一位,继续取下一段做判断,直到num1长度小于sum2长度时停止,返回0
  • 全程未使用数组,完全符合题目要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:03:18