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

如何用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;
}

代码逻辑说明

  1. 保留原始输入:用temp_a和temp_b处理数位提取,避免修改a和b的原始值。
  2. 溢出防护:使用long long类型存储结果result和位权power,防止多位数输入时结果超出int的取值范围。
  3. 交替提取逻辑:
    • 循环条件为temp_a != 0 || temp_b != 0,只要任一数还有数位就继续处理。
    • 每次先提取第一个数的最低位(temp_a%10),通过result = digit * power + result将数位添加到结果的高位(左侧),随后更新位权power并移除temp_a的最低位。
    • 再以相同逻辑提取第二个数的最低位。
    • 当其中一个数处理完毕,循环会自动处理另一个数的剩余数位,将其依次添加到结果左侧,完全符合题目要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:59:57