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

