如何用C语言交替合并两个正整数的数位(从最低位开始)
问题解决方案
原代码问题分析
- 循环条件无效:
for (n1=1; a<1; n1++)中,a是正整数,a<1恒为假,循环从未执行,无法完成数位计数。 - 破坏原始输入:直接修改
a和b的取值,导致后续无法提取原始数的数位,逻辑完全错误。 - 数位计数逻辑错误:
a = a / n1*10的计算无意义,正确的数位计数应通过临时变量反复除以10实现,但本问题无需提前计数。
正确实现代码
#include<stdio.h> int main() { int a, b; int temp_a, temp_b; long long result = 0; // 用long long避免结果溢出 long long power = 1; // 输入第一个正整数,确保非负 do { printf("请输入第一个正整数: "); scanf("%d", &a); } while (a < 0); // 输入第二个正整数,确保非负 do { printf("请输入第二个正整数: "); scanf("%d", &b); } while (b < 0); temp_a = a; temp_b = b; // 交替提取数位并构建结果 while (temp_a != 0 || temp_b != 0) { // 优先提取第一个数的最低位 if (temp_a != 0) { int digit = temp_a % 10; result = digit * power + result; // 将数位添加到结果左侧 temp_a /= 10; power *= 10; // 结果位数扩容 } // 再提取第二个数的最低位 if (temp_b != 0) { int digit = temp_b % 10; result = digit * power + result; temp_b /= 10; power *= 10; } } printf("最终结果: %lld\n", result); return 0; }
代码逻辑说明
- 保留原始输入:用
temp_a和temp_b处理数位提取,避免修改a和b的原始值。 - 溢出防护:使用
long long类型存储结果result和位权power,防止多位数输入时结果超出int的取值范围。 - 交替提取逻辑:
- 循环条件为
temp_a != 0 || temp_b != 0,只要任一数还有数位就继续处理。 - 每次先提取第一个数的最低位(
temp_a%10),通过result = digit * power + result将数位添加到结果的高位(左侧),随后更新位权power并移除temp_a的最低位。 - 再以相同逻辑提取第二个数的最低位。
- 当其中一个数处理完毕,循环会自动处理另一个数的剩余数位,将其依次添加到结果左侧,完全符合题目要求。
- 循环条件为
内容的提问来源于stack exchange,提问作者Loyalty
相关产品推荐
相关产品推荐

