如何将两个整数各数位的较大数字组合为新整数并存储
解决方案
你的代码已经正确计算出了所有需要的数位,但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
相关产品推荐
相关产品推荐

