C++ 代码调试:修复输出错误 - 分解偶数为两个质数之和
以下代码旨在实现输入一个正偶数 N,输出 (N-2)/2 行,每行输出一个正偶数 2i+2,以及该偶数分解为两个最小质数之和的结果。
#include<iostream>
#include<cmath>
using namespace std;
bool is_prime(int n)
{
int sqr = sqrt(double(n));
int i = 2;
while (i <= sqr)
{
if (n % i != 0) i = i + 1;
else break;
}
if (i > sqr) return true;
else return false;
}
int main()
{
int N = 0;
cin >> N;
for (int i = 1; i <= (N - 2) / 2; i++)
{
int num = 2 * i + 2;
for (int j = 2; j <= num; j++)
{
if (is_prime(j) && is_prime(num - j));
cout << num << '=' << j << '+' << (num - j) << endl;
break;
}
}
return 0;
}
代码中的问题在于 if 语句的结尾处多了一个分号。这会导致 if 语句后面的输出语句始终被执行,而不受 if 语句的条件限制。为了修正这个问题,你应该移除 if 语句末尾的分号。
修正后的代码如下:
#include<iostream>
#include<cmath>
using namespace std;
bool is_prime(int n)
{
int sqr = sqrt(double(n));
int i = 2;
while (i <= sqr)
{
if (n % i != 0) i = i + 1;
else break;
}
if (i > sqr) return true;
else return false;
}
int main()
{
int N = 0;
cin >> N;
for (int i = 1; i <= (N - 2) / 2; i++)
{
int num = 2 * i + 2;
for (int j = 2; j <= num; j++)
{
if (is_prime(j) && is_prime(num - j))
{
cout << num << '=' << j << '+' << (num - j) << endl;
break;
}
}
}
return 0;
}
现在,代码会在满足条件的情况下输出符合要求的等式,而不再无条件输出。
原文地址: https://www.cveoy.top/t/topic/Tw8 著作权归作者所有。请勿转载和采集!