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

C语言中计算从倒数第二位开始隔位数字之和的代码问题排查

你的校验和代码问题分析与修正

核心问题点

  1. pow函数的精度陷阱
    pow是浮点运算函数,计算10的整数次幂时可能出现精度误差,比如pow(10, 2)实际返回值可能是99.9999999999,强制转成int后就变成了99,导致你取位的计算完全错误。处理数字位的操作应该用整数运算,避免浮点函数。

  2. 循环逻辑混乱
    你在循环里同时做了两件矛盾的事:一边用pow(10, i-1)去取原数字的高位,一边又把number除以10修改它的值。这会导致每次循环取到的位完全不符合预期,比如第二次循环时number已经是原数的1/10,再用pow(10,2)取位,结果完全错位。

  3. 循环条件不符合需求
    你的循环从i=2到i<=d,但d的定义不明确,而且这个逻辑无法实现“从倒数第二位开始,每隔一位取数”的需求——你需要的是从右往左,跳过最后一位,然后依次取倒数第2、4、6...位,而不是按固定次数循环。

修正后的代码示例

下面是实现需求的正确写法,用纯整数运算处理,逻辑清晰:

// 实现从倒数第二位开始,每隔一位数字乘2后的和
int sum = 0;
// 先去掉最后一位,从倒数第二位开始处理
number = number / 10;

// 循环处理:每次取当前最后一位,然后右移两位(跳过下一位)
while (number > 0) {
    // 取当前数字的最后一位
    int digit = number % 10;
    sum += digit * 2;
    // 右移两位,跳过下一位,处理下一个目标位
    number = number / 100;
}

printf("%i", sum);

逻辑说明

  • 第一步number = number /10:直接去掉原数字的最后一位,让当前数字的最后一位就是原数字的倒数第二位。
  • 循环里number %10取当前最后一位(也就是原数字的倒数第2、4、6...位),乘2后加到sum。
  • number = number /100:把数字右移两位,跳过不需要处理的那一位,继续处理下一个目标位,直到数字变为0停止循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:45:43