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
相关产品推荐
相关产品推荐

