【发布时间】:2018-08-14 13:57:05
【问题描述】:
我正在做一个 Project Euler 挑战,以找出一个数的所有质因数。我正在使用一个初始化为 true 的布尔数组,然后通过将 bool 值更改为 false 来“划掉”倍数。 (这是 Eratosthenes 的筛子)但我不知道如何将元素保存为 false。我可以让它列出非素数(或“假”数),但是当我尝试打印出素数或“真”数时,它会打印每个数字。如果有人能告诉我我做错了什么,我将不胜感激。
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
void hope(int n, bool Ar[n])
{
for (int i = 2; i <= n; ++i)
{
if (Ar[i] = (true))
{
for (int j = i*i; j<=n; j = i+j)
{
Ar[j] = false;
}
}
}
for (int i = 2; i <= n; ++i)
{
if (Ar[i] = (true))
{
printf("\ntrue value: %d", i);
}
}
}
int main ()
{
int n = 15;
bool Ar[15] = {true};
hope(n, Ar);
return 0;
}
【问题讨论】:
-
=用于分配。==用于相等比较。 -
if (Ar[i] = (true))-->if (Ar[i] == (true))或更好:if (Ar[i]) -
另外,
bool Ar[15] = {true}只初始化数组的第一个成员。 -
哦,真的等一下吗?非常感谢!
-
您是否打开了警告?
if (Ar[i] = (true)) ...应该给你一个警告。