【发布时间】:2017-11-09 07:34:19
【问题描述】:
所以我在编程方面真的很陌生,我在乱搞,决定尝试编写一个 Prime 生成器。这个想法是用户输入计算机应该检查素数的最大数量,并输出一个包含所有素数的文本文件。 所以我写了这段代码。
#include <iostream>
#include <string>
#include <Windows.h>
#include <fstream>
using namespace std;
int isPrime(int num) {
for (int a = 1; a <= num/2; a++)
if (num % a == 0)
return 0;
return 1;
}
int main() {
ofstream out_data("primes.txt");
std::string name;
int quantity;
int maximum = 1000000;
std::cout << "What is your name ?\n";
getline(std::cin, name);
std::cout << "What is the biggest number you want to get as a prime " << name << "? Please note that the maximum is " << maximum <<" \n";
std::cin >> quantity;
if (quantity <= maximum) {
for (int b = 1; b < quantity; b++) {
if (isPrime(b) == 1) {
std::cout << b << "\n";
out_data << b << "\n";
}
}
std::cout << "The computer has finished calculating primes. Please check your folder for a .txt file.";
Sleep(60000);
}
if (quantity > maximum) {
std::cout << "Oh, i'm sorry. The computer can not calculate till " << quantity << ".";
Sleep(15000);
}
return 0;
}
文件和控制台只显示数字 1。我花了一些时间试图找出代码有什么问题,但一无所获。在我看来,for循环会重复自己,if语句会重复,直到b
【问题讨论】:
-
有趣的是,您将
maximum设置为 100 万。假设一个 32 位整数,你的最大值应该在 21 亿左右,你应该使用INT_MAX。 -
还可以尝试将函数
isPrime声明为bool。然后你会写return false; //instead of return 0和return true; //instead of return 1。在你的 if 语句中你可以写if(isPrime(b))。请注意,您也可以这样编写 if 语句而无需更改,因为在 C++ 中,除 0 之外的每个整数值都计算为 true。 -
在每次迭代时运行此函数,以查看当前迭代的数字是否为素数:Determining if a number is prime