我创建了一个查找素数的函数,我需要帮助将这些数写到具有列和行的格式正确的表中的文件中。我想我需要一些嵌套循环,但是我不知道什么是最好的实现。到目前为止,这是我的代码,希望大家能帮助我。谢谢
现在我的代码要做的是将数字2和3写入文件,然后它在空行的无限循环中进行。
文件应如下所示:
2 3 5 11 13 17 19 23一直到最接近质数的400029 31 37 41 43 47 53
...
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
using namespace std;
bool isPrime(int);
int main()
{
int counter = 0;
int currentNumber = 2;
ofstream outputFile("test.txt");
for (int i = 2; i < 4000; i++)
{
for (int row = 1; row < 4000; row++)
{
for (int col = 1; col <= 8; col++)
{
if (isPrime(i) == true)
{
outputFile << endl;
outputFile << setw(8);
outputFile << i;
outputFile << setw(10);
i++;
}
}
outputFile << endl;
}
}
system("pause");
return 0;
}
bool isPrime(int number)
{
for (int i = 2; i < number; i++)
{
if (number % i == 0)
{
return false;
}
}
return true;
}
答案 0 :(得分:0)
您是如此亲密。只需计数最多8个质数并打印新行,然后重置计数器,直到下一个8行即可。您已经在循环内以及“ for”行上复制了i ++,行和col的内容都是不必要的。 / p>
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
using namespace std;
bool isPrime(int number)
{
for (int i = 2; i < number; i++)
{
if (number % i == 0)
{
return false;
}
}
return true;
}
int main()
{
int counter = 0;
ofstream outputFile("test.txt");
for (int i = 2; i < 4000; i++)
{
if (isPrime(i) == true)
{
outputFile << setw(8);
outputFile << i;
outputFile << setw(10);
counter++;
}
if (counter == 8)
{
outputFile << endl;
counter = 0;
}
}
return 0;
}
答案 1 :(得分:0)
Richq已经为您提供了一种更好的方法来实现此目的,但让我们看一下您在代码中做错了什么(查看您的意图,但并不总是如此):
您的外循环从2到4000。然后为每个数字打印一个表格。 (因为您在表中也增加了i,但实际上并没有增加,但是我们可以忽略它。)这有点不对。您只需要一张桌子,这样外部循环就可以了。不过请保留int i = 2;
。
第二个循环:行从1到4000,每行打印8个质数。但是,您只希望数字小于4000。显然,4000 * 8质数会更大。您不知道需要多少行表格。行的退出条件应该改为i < 4000
。
第三循环:col从1到8。但是也许在最后一行,我将在第3个数字上超过4000。因此,如果i <4000是硬性限制(即使已经达到4000,也不能打印到行尾),则需要将其包括在条件(col <= 8) && (i < 4000)
中。
内部有两个问题:
将换行符移出内部循环。您只需要在每一行之后执行此操作。在行内总是递增i。但是,如果您发现素数,则仅增加col。
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
using namespace std;
bool isPrime(int);
int main()
{
int counter = 0;
int currentNumber = 2;
ofstream outputFile("test.txt");
int i = 2;
for (int row = 1; i < 4000; row++)
{
for (int col = 1; (col <= 8) && (i < 4000); i++)
{
if (isPrime(i) == true)
{
outputFile << setw(8);
outputFile << i;
outputFile << setw(10);
col++;
}
}
outputFile << endl;
}
return 0;
}
bool isPrime(int number)
{
for (int i = 2; i < number; i++)
{
if (number % i == 0)
{
return false;
}
}
return true;
}