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

C语言提取数字每第k位组成新数,现有代码输出错误如何修正

问题产生原因
  • 核心逻辑偏差:你当前代码的实现逻辑是将原数按连续k位为一组做拆分,而需求是提取原数中所有序号为k的倍数的单个数字,二者逻辑完全不符。比如输入n=12345678、k=2时,你现有代码输出的是12 34 56 78,但预期输出的应该是由第2、4、6、8位数字组成的新数。
  • 整数运算误用浮点函数:pow()是C标准库提供的浮点数运算函数,用于整数幂次计算时容易出现精度误差(例如pow(10,2)在部分编译环境下可能返回99.9999999999,强转int后变成99),会导致取模、除法运算结果异常。
修复方案

我们先明确需求的常规约定:从数字的最高位开始计数,每间隔k-1位取1个数字,将取出的数字按顺序拼接成新数。例如n=12345678、k=2时,取出的数字依次是2、4、6、8,最终输出2468;如果需要从低位开始计数,调整计数规则即可。

修改后的完整代码如下:

#include <stdio.h>
#define MAX 100

void printDigit(int n, int k) {
    // 把数字的每一位按低位到高位存入数组
    int digits[MAX];
    int digitCount = 0;
    int temp = n;
    while (temp > 0) {
        digits[digitCount++] = temp % 10;
        temp /= 10;
    }

    // 从高位到低位遍历,取每第k位数字输出
    for (int i = digitCount - 1; i >= 0; i--) {
        // 计算当前位从左数的序号:总位数-当前下标
        if ((digitCount - i) % k == 0) {
            printf("%d", digits[i]);
        }
    }
    printf("\n");
}

int main() {
    int n = 12345678;
    int k = 2;
    printDigit(n, k);
    return 0;
}

如果需要改为从低位开始计数的规则,只需要把循环里的判断条件改为(i + 1) % k == 0即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:27:02