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

如何将两个整数各数位的较大数字组合为新整数并存储

解决方案

你的代码已经正确计算出了所有需要的数位,但sum变量里存储的是数位的逆序(比如示例中sum是65435577,而正确结果是77553456),所以需要把sum反转才能得到正确顺序的整数存在变量中。

方法1:反转sum得到结果

先按原逻辑收集逆序数位,再通过反转数字得到正确顺序的结果:

#include <stdio.h>

int reverse(int num) {
    int reversed = 0;
    while (num != 0) {
        reversed = reversed * 10 + num % 10;
        num /= 10;
    }
    return reversed;
}

int main() {
    int num1, num2, sum = 0;
    printf("Enter two numbers\n");
    scanf("%d%d", &num1, &num2);
    
    // 收集逆序数位
    while ((num1 != 0) || (num2 != 0)) {
        sum *= 10;
        if (num1 % 10 > num2 % 10)
            sum += num1 % 10;
        else
            sum += num2 % 10;
        num1 /= 10;
        num2 /= 10;
    }
    
    // 反转得到正确顺序的结果
    int result = reverse(sum);
    printf("%d\n", result); // 直接打印正确结果
    return 0;
}

方法2:先收集数位再构建正确结果

先把每一位的较大数存入数组,再从高位到低位构建结果:

#include <stdio.h>

int main() {
    int num1, num2;
    int digits[20]; // 足够容纳int类型的最大位数
    int count = 0;
    
    printf("Enter two numbers\n");
    scanf("%d%d", &num1, &num2);
    
    // 从低位到高位收集每一位的较大数
    while ((num1 != 0) || (num2 != 0)) {
        int d1 = num1 % 10;
        int d2 = num2 % 10;
        digits[count++] = (d1 > d2) ? d1 : d2;
        num1 /= 10;
        num2 /= 10;
    }
    
    // 从高位到低位构建结果整数
    int result = 0;
    for (int i = count - 1; i >= 0; i--) {
        result = result * 10 + digits[i];
    }
    
    printf("%d\n", result);
    return 0;
}

注意事项

  • 要注意int类型的范围限制:如果两个输入数的位数较多,组合后的结果可能超出int的最大值(通常是2^31-1=2147483647),这种情况下建议使用long long类型存储结果,避免溢出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:01:00