我正在尝试编写一个程序,它会告诉您输入的编号是否为素数,并将所有素数从1到100写入文件并显示数字。这是我到目前为止所做的,但我迷路了。
bool isPrime(int);
int _tmain(int argc, _TCHAR* argv[])
{
int num, answer, choice, i, numb=1;
do
{
cout<< "Enter a number and I will tell you if it is prime or not."<<endl;
cin>> num;
if (isPrime(num))
cout<<num<<" is a prime number."<<endl;
else
cout<<num<< " is not a prime number."<<endl;
cout<<"Would you like the first 100 prime numbers displayed? (1 for yes and 2 for no)"<<endl;
cin>>choice;
if (choice == 1)
{
while(numb<=100)
{
i=2;
while(i<=numb)
{
if(num%i==0)
break;
i++;
}
if(i==num)
cout<<numb<<" is Prime"<<endl;
numb++;
}
}
else
{
cout<<"Would you like to run the program again? (1 for yes and 2 for no)"<<endl;
cin>>answer;
if (answer == 2)
{
exit(0);
}
}
while (answer == 1);
}
system("pause");
return 0;
}
bool isPrime (int number)
{
int i;
for (i=2; i<number; i++)
{
if (number % i == 0)
{
return false;
}
}
return true;
}
答案 0 :(得分:3)
真的觉得你在想这个。你已经完成了编写isprime函数的困难部分。
显示数字是微不足道的,只需编写一个for循环来查看数字并检查哪些是素数,如果特定数字是素数,则将其打印到屏幕。
然后,只需在循环内添加写入文件,即可打印到屏幕上的数字。
答案 1 :(得分:1)
为什么不重用你的isPrime()?
cout<<"Would you like the first 100 prime numbers displayed? (1 for yes and 2 for no) <<endl;
cin>>choice;
for (i=2; i < 100; i++)
{
if (isPrime(i)) cout << i << endl;
}
答案 2 :(得分:1)
当你将所有素数从1打印到100时,你会为自己复杂化。退后一步,想想你想做什么;循环从1到100,打印数字,如果它的素数。
for (int i = 1; i <= 100; ++i) {
if (isPrime(i))
cout << i << endl;
}
答案 3 :(得分:0)
while
循环的do-while
关键字位于错误的行。它应该遵循右大括号。编译器在你发布的示例代码的第56行附近说。
在进行更改以符合标准C ++之后,我编译并运行了该程序。我选择了将所有素数列为100的选项。它是慷慨的并显示所有数字,素数与否(提示:2之后的偶数不是素数)。
我在开头插入了以下几行:
#include <iostream>
using namespace std;
我将主要功能从_tmain
更改为main
,因为我没有使用Visual Studio编译器。论点也是如此:
int main(int argc, char * argv[])
顺便说一下,如果你没有将参数传递给你的程序,你可以简化main
的声明:
int main(void)
这是一个加速你的主要探测器的修改:
bool isPrime (int number)
{
int i;
if (number == 2)
{
return true;
}
if ((number % 2) == 0)
{
return false;
}
for (i = 3; i < number; i += 2)
{
if (number % i == 0)
{
return false;
}
}
return true;
}
这减少了一半的支票数量,因为2之后的每个偶数都不是素数,只有奇数。