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

C++程序求两数间同时被4和6整除整数和的问题排查

问题分析与代码修复

嘿,我来帮你拆解下代码里的问题,这两个小错误直接导致结果和预期不符:

1. 判断条件完全搞反了

你在if语句里写的是num1 % 4 == 0 && num2 % 6 == 0——这是在检查输入的两个数是否分别满足被4、6整除,而不是检查循环里的当前数字i是否同时被4和6整除!

在你的测试用例里,num1=4(能被4整除)、num2=12(能被6整除),所以这个条件一直为真,循环里的5到11所有数都被加到了sum里,5+6+7+8+9+10+11=56,这就是你得到56的原因。

正确的判断应该是检查当前循环的i:i % 4 == 0 && i % 6 == 0,或者更简洁的写法——因为4和6的最小公倍数是12,所以直接写i % 12 == 0也可以,效果完全一样。

2. 循环范围漏掉了目标数

你的循环是for(int i = num1 + 1;i<num2;i++),这意味着循环从num1+1开始,到num2-1结束,直接跳过了num2。而你的预期结果里12是符合条件的,所以循环需要覆盖num1到num2的所有数(包括两端)。另外,最好处理一下输入顺序的问题——如果用户输入的第一个数比第二个数大,循环就根本不会执行,所以我们可以先把两个数的大小理清楚。

修复后的完整代码

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
    int num1, num2, sum=0;
    cout << "Input first number : ";
    cin >> num1;
    cout << "Input second number : ";
    cin >> num2;

    // 确保起始数小于等于结束数,兼容输入顺序颠倒的情况
    int start = min(num1, num2);
    int end = max(num1, num2);

    for(int i = start; i <= end; i++) {
        // 判断当前数字是否同时被4和6整除
        if (i % 4 == 0 && i % 6 == 0) {
            sum += i;
        }
    }
    cout<< "The sum of all integers that are both divisible by 4 and 6 between " << num1 << " and " << num2 << " is " << sum << endl;
    system("pause");
    return 0;
}

测试验证

当你输入4和12时,循环会遍历4到12的所有数,其中只有12满足条件,输出结果就是The sum of all integers that are both divisible by 4 and 6 between 4 and 12 is 12,和你的预期完全一致。

如果不想引入<algorithm>头文件,也可以手动交换两个数:

// 替换min和max的部分
if (num1 > num2) {
    swap(num1, num2);
}
// 之后循环用num1到num2即可
for(int i = num1; i <= num2; i++) {
    // ...判断条件不变
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:13:47