将列和行中的质数打印到文件中
Print prime numbers in columns and rows to a file
>我创建了一个查找素数的函数,我需要帮助将这些数字写入格式良好的表中的文件中,其中包含列和行。我想我需要一些嵌套循环,但我不知道什么是最好的实现。这是我到目前为止的代码,希望你们能帮助我。谢谢
现在我的代码所做的是将数字 2 和 3 写入文件,然后它进入空行的无限循环。
该文件应如下所示:
2 3 5 11 13 17 19 23一直到最接近 4000 的质数29 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;
}
你离得太近了。只需数到 8 个素数并打印出一行新行,然后重置计数器直到下一个 8 个。您已经在循环内以及"for"行上复制了 i++,行和 col 的东西都是不必要的。
#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;
}
Richq 已经为您提供了更好的实现方法,但让我们看看您在代码中做错了什么(查看您的意图,并不总是它的作用(:
您的外环从 2 到 4000。然后为每个数字打印一个表格。(不是真的,因为您也在表中增加 i,但让我们忽略它。这有点不对劲。你只需要一个表,所以外循环必须去。不过,请保持int i = 2;
。
第二个循环:行从 1 到 4000,每行打印 8 个质数。但是您只需要小于 4000 的数字。显然,4000 * 8 个素数会更大。您不知道需要多少行表格。应改为i < 4000
行的退出条件。
第三个循环:col 从 1 到 8。但也许在最后一行,我将在第 4000 个数字上超过 3。因此,如果我<4000 是一个硬限制(即使您已经达到 4000,也不会打印到行尾(,那么您需要将其包含在条件中:(col <= 8) && (i < 4000)
.
内部有2个问题:
- 在每个质数之前打印一个新行。这就是为什么你在一行中得到一个 2 和 3,而不是在同一行中得到两个。
- 仅当 i 是质数时,您才递增 i。所以在 2 和 3 之后,你的增量 i。但是你有 4,表格的其余部分只会测试 4 不是素数,什么也不打印。
将换行符移出内部循环。您只需在每行之后执行此操作。并且在行内始终递增 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;
}
相关文章:
- 回溯C++不打印函数,因此文件
- 在gem5中打印文件中的所有cache_blocks
- 打印逐行存储的文本文件
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C/C++:打印(配置)头文件的内容
- 如何使代码打印文本文件中的第一行?
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 按单词搜索文件,然后在C++中打印特定行数
- C++ 尝试优化每一帧将数据打印到二进制文件
- 如何访问头文件中类的组件并打印它们的地址?
- 如何在c ++中以一行(水平)打印两个文件的数据?如给定的.这两种形式来自两个不同的文本文件
- 使用 fstream 库并在屏幕上打印的文件有问题?
- 如何在几个空行后打印文件中的输出
- 二进制文件以及如何对其采取行动(打印文件)
- C 获取目录路径,解析文件夹名称和来自Parent Directory的打印文件内容
- 打印文件中的文本
- 如何打印文件的内容
- 打印文件的分段故障特征
- 打印文件夹中的文件
- 用c++打印文件的第n列