质数练习 - 循环问题 C++
Prime Numbers Exercise - Loop Issue C++
我正在尝试解决 Stroustrup 书中关于计算和打印 1 到 100 之间的数字是否为质数的练习。
我的代码似乎工作得很好,但是当它在屏幕上打印值时,它是从 6 而不是 2 开始的。
我试图找出原因,但我无法理解其中的原因。
你能帮我一把吗?
非常感谢!
// Prime Numbers.cpp : definisce il punto di ingresso dell'applicazione console.
//
#include "stdafx.h"
#include "std_lib_facilities.h"
vector<int> primes = { 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97 };
int primecheck(int x) {
for (int i : primes) {
if (x <= primes[i])
break;
if (primes[i] == x)
return 1;
while (x % primes[i] != 0) {
--i;
if (i < 0) {
return 1;
break;
}
else {
if (x % primes[i] == 0)
return 2;
}
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
for (int i = 1; i <= 100; ++i) {
if (primecheck(i) == 1) {
cout << i << " is a Prime Number." << endl;
}
else {
if (primecheck(i) == 2) {
cout << i << " is not a Prime Number." << endl;
}
}
}
keep_window_open();
return 0;
}
for (int i : primes)
不同于 for(int i = 0;i < terminating condition; ++i)
.
您可以将 for(int i : primes)
视为 "For every int i
in the container primes
, do something.",将 for(int i = 0; i < terminating condition; ++i)
视为 "for every int i
up to terminating condition, do something"
为你的循环试试这个:
for (int i : primes) {
if (x <= i)
break;
if (i == x)
return 1;
while (x % i != 0) {
--i;
if (i < 0) {
return 1;
break;
}
else {
if (x % i == 0)
return 2;
}
}
}
int primecheck(int x) {
int flag=1;
for (int i =2;i<x;i++)
{
if(x%i)
flag=2;
}
return flag;
}
请改变你的函数,避免数组
你的代码错误很大,你应该重写它。
并非所有路径都有 return 语句,您必须使用 i 而不是 prime[i]
有简单的工作代码:
int primecheck(int x) {
for (int prime : primes) {
if (x < prime) {
return 2;
}else if (x == prime) {
return 1;
}
return 2;
}
我正在尝试解决 Stroustrup 书中关于计算和打印 1 到 100 之间的数字是否为质数的练习。
我的代码似乎工作得很好,但是当它在屏幕上打印值时,它是从 6 而不是 2 开始的。
我试图找出原因,但我无法理解其中的原因。
你能帮我一把吗?
非常感谢!
// Prime Numbers.cpp : definisce il punto di ingresso dell'applicazione console.
//
#include "stdafx.h"
#include "std_lib_facilities.h"
vector<int> primes = { 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97 };
int primecheck(int x) {
for (int i : primes) {
if (x <= primes[i])
break;
if (primes[i] == x)
return 1;
while (x % primes[i] != 0) {
--i;
if (i < 0) {
return 1;
break;
}
else {
if (x % primes[i] == 0)
return 2;
}
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
for (int i = 1; i <= 100; ++i) {
if (primecheck(i) == 1) {
cout << i << " is a Prime Number." << endl;
}
else {
if (primecheck(i) == 2) {
cout << i << " is not a Prime Number." << endl;
}
}
}
keep_window_open();
return 0;
}
for (int i : primes)
不同于 for(int i = 0;i < terminating condition; ++i)
.
您可以将 for(int i : primes)
视为 "For every int i
in the container primes
, do something.",将 for(int i = 0; i < terminating condition; ++i)
视为 "for every int i
up to terminating condition, do something"
为你的循环试试这个:
for (int i : primes) {
if (x <= i)
break;
if (i == x)
return 1;
while (x % i != 0) {
--i;
if (i < 0) {
return 1;
break;
}
else {
if (x % i == 0)
return 2;
}
}
}
int primecheck(int x) {
int flag=1;
for (int i =2;i<x;i++)
{
if(x%i)
flag=2;
}
return flag;
}
请改变你的函数,避免数组
你的代码错误很大,你应该重写它。 并非所有路径都有 return 语句,您必须使用 i 而不是 prime[i]
有简单的工作代码:
int primecheck(int x) {
for (int prime : primes) {
if (x < prime) {
return 2;
}else if (x == prime) {
return 1;
}
return 2;
}