【发布时间】:2016-05-24 09:37:56
【问题描述】:
我被困在我的编程任务中 此分配使用布尔数组查找 2 到 N 之间的素数 它的方法是所有素数“索引”将设置为真,其他将设置为假,所以最后它只是打印出真正的索引 这是我的代码
#include <iostream>
#include <ctime>
using namespace std;
int main(){
int n,i;
int count = 0;
cout << "Enter the value of n: ";
cin >> n;
bool* prime = new bool[n];
for (i=0;i<=n;i++)
prime[i] = true;
for (i=2;i<=n;i++)
if (prime[i])
for (int j=n;j=i;j--)
if (j%i == 0)
prime[j] = false;
cout << "Prime numbers: ";
for (i=2;i<=n;i++)
if(prime[i])
{cout << i <<", ";
count++;}
cout << count <<" primes found.";
//hold the windows
system("pause");
return 0;
}
问题是我输入N的值后,程序没有反应,什么也没有显示出来。
【问题讨论】:
-
表达式
j=i永远不会计算为假,因此您的内部循环永远不会终止。 -
在内循环中:
for (int j=n;j=i;j--)您分配给j(非零或真)值。您需要比较for (int j = n; j <= i; j--)(或==)。如果你的编译器没有警告你在条件上下文中使用赋值(我得到error: suggest parentheses around assignment used as truth value [-Werror=parentheses]- 一个错误,因为我添加了-Werror将警告转换为错误),你要么需要打开编译器警告,要么你需要一个更好的编译器。 -
仅供参考,最后您需要致电
delete[] prime;。考虑使用std::vector而不是数组来避免手动内存管理(只需将bool* prime = new bool[n]更改为std::vector prime; prime.reserve(n);)。
标签: c++