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

C语言如何输出数字中所有连续数位组成的组合数值

实现思路

你的现有方案只针对1/2/3位的连续数位单独写了循环,自然没法适配更多位数的数字,我们可以通过「先转字符串处理子串再转回数值」的思路实现通用逻辑:

  • 先把输入的正整数转为字符数组,连续数位本质就是字符串的连续子串
  • 两层循环遍历所有子串的起始和结束位置,把每个子串转成整数输出即可
  • 不管输入数字是多少位,都能自动适配所有长度的连续数位
可运行参考代码
#include <stdio.h>
#include <string.h>

int main() {
    long num = 5025;
    char str[20]; // 足够存储long类型最大长度的数字
    sprintf(str, "%ld", num); // 把数字转为字符串
    int len = strlen(str);
    
    // 遍历所有子串长度:从1位到总长度
    for (int sub_len = 1; sub_len <= len; sub_len++) {
        // 遍历当前长度子串的起始位置
        for (int start = 0; start <= len - sub_len; start++) {
            long res = 0;
            // 子串转数字
            for (int i = start; i < start + sub_len; i++) {
                res = res * 10 + (str[i] - '0');
            }
            printf("%ld\n", res);
        }
    }
    return 0;
}
效果验证

输入num=158时,输出结果完全符合要求:

1
5
8
15
58
158

如果不想用转字符串的方案,也可以用纯数学计算实现:先计算数字的总位数,再遍历截取对应长度的数值即可,逻辑和字符串方案是一致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:54:03