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

计算数字位降序整数和的C程序异常问题排查

问题分析与修复

你的代码存在多个关键错误,导致输出不符合预期,以下是问题拆解和修复方案:

核心错误点

  • sum初始化位置错误:你在每次输入整数后都执行sum = 0,这会清空之前累加的结果,最终要么只保留最后一个符合条件的数,要么直接输出0。正确做法是把sum的初始化移到外层循环之前。
  • temp未赋值:内层循环直接使用temp,但没有将当前输入的n赋值给它,属于未定义行为。需要在每次处理新输入的n时,先执行temp = n;。
  • 降序判断逻辑错误:当前代码只要发现某一对相邻位是降序,就立刻将当前数加入sum,还会重复累加(比如4321有3对相邻位,会被加3次)。正确逻辑是:检查整个数的所有相邻位是否都满足降序,只有全部符合才将该数计入总和。
  • 计数变量c更新错误:当前代码每发现一对降序位就给c加1,导致c的数值远大于实际符合条件的数的个数,应该在确认整个数符合降序后,再将c加1。

修复后的代码

#include <stdio.h>

int main() {
    int n, last, secondlast, sum = 0, c = 0;
    int temp;

    while (scanf("%d", &n) == 1) {
        int is_descending = 1; // 标记当前数是否为降序
        temp = n;
        // 仅处理位数大于1的数,单个数字默认是降序
        while (temp / 10 > 0) {
            last = temp % 10;
            secondlast = (temp / 10) % 10;
            if (secondlast <= last) { // 只要有一对不符合降序,立刻终止检查
                is_descending = 0;
                break;
            }
            temp = temp / 10;
        }
        if (is_descending) {
            sum += n;
            c++;
        }
    }

    if (c == 0) {
        printf("There are no numbers that meet the requirements\n");
    } else {
        printf("%d\n", sum);
    }
    return 0;
}

测试验证

输入4321、75、56、4,79时:

  • 4321:所有相邻位(4>3,3>2,2>1)均为降序,计入总和
  • 75:7>5,符合条件,计入总和
  • 56:5<6,不符合,跳过
  • 4,79:遇到非整数,停止输入
    最终总和为4321+75=4396,与预期结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:10:30