我用c ++编写了一个程序来打印所有素数高达100,但它只是写"hello world"
,然后挂起。那是为什么?
#include <iostream>
bool is_prime(int num)
{
if(num == 1)
{
return false;
}
for(int i = 2; i < num; i++)
{
if(num % i == 0)
{
return false;
}
}
return true;
}
int increase(int i)
{
return i++;
}
int main()
{
std::cout << "hello world!!" << std::endl;
int i = 1;
while(i < 100)
{
i = increase(i);
if(is_prime(i))
{
std::cout << i << " is prime" << std::endl;
}
}
}
答案 0 :(得分:22)
return i++;
此语句将返回i
的原始值,而不是递增的值。
您需要return ++i;
或return i + 1
(感谢@interjay指出)。后来的return i + 1;
清楚地表明只有返回值很重要,而不是i
的新值。
下一行(或使用i++
)可以看到后期增量i
的效果。
不确定,如果您需要一个单独的方法来增加变量i
,您可以在while循环中执行此操作。
while(i < 100)
{
if(is_prime(i))
{
std::cout << i << " is prime" << std::endl;
}
i++;
}
您还可以使用for
循环,而不是while
,因为您正在使用一系列值。
for(i = 1; i < 100; i++)
{
if(is_prime(i))
{
std::cout << i << " is prime" << std::endl;
}
}
答案 1 :(得分:10)
试试这个:
int increase(int i)
{
return ++i;
}
获取i
的递增值,否则你将获得i的原始值,这将导致你进入无限循环。
更好的方法是使用(为清晰起见):
int increase(int i)
{
return i+1;
}
答案 2 :(得分:3)
您正在呼叫i++
。 i ++记住i
具有的值,并返回该值。尝试拨打++i
。
答案 3 :(得分:3)
return i++;
返回i
,然后在函数堆栈中增加i
,
请改用return ++i;
。
记得在X ++上做一些事先做一些事情,然后再增加X.
答案 4 :(得分:2)
问题是你的增加功能会不断返回1.要解决问题,请将i++
更改为++i
,第二个修改i
,然后在返回前添加1
答案 5 :(得分:2)
为什么要创建一个增加i的函数。只是i = i + 1;
问题在于i ++;应该改为++ i;
i ++评估i然后递增i,而在评估之前它应该是递增i。
另一个问题从5开始,而不是2,因为你已经处理了案例
bool is_prime(int num)
{
if(num == 1)
{
return false;
}
if(num == 2 || num == 3)
{
return true;
}
for(int i = 5; i < num; i++)
{
if(num % i == 0)
{
return false;
}
}
return true;
}
另一种做素数的方法:
bool is_prime(int num)
{
while(1)
{
int div = x-1;
if(x%div==0)
return false;
else
if(div != 1)
div--;
else
return false;
}
}
答案 6 :(得分:2)