【发布时间】:2014-04-21 22:10:51
【问题描述】:
我有奇怪的代码输出。这里我有素数迭代器:
#include <iostream>
#include "PrimeIterator.cpp"
int main() {
PrimeIterator prime(9);
std::cout << "Prime number " << prime.getN() << " is " << prime.value() << std::endl;
std::cout << "Next prime number " << " is " << prime.next() << "..." << prime.next() << "..." << prime.next() << std::endl;
return 0;
}
如果我在一个原始文件中输出 prime.next() 它会给我一个奇怪的结果: 下一个素数是 37...31...29 但不是 29...31...37((( 如果我将它们放入 3 个不同的原始数据中,一切正常。请说明为什么 c++ 会给出这样的结果... 我的 PrimeIterator:
#include <iostream>
#define MAXPRIME 1000
class PrimeIterator {
private:
int n;
int prime[MAXPRIME];
public:
PrimeIterator( int n ) : n(n) {
initPrimeArray(n);
}
int getN() const {
return n;
}
int isPrime(int primeNumber) {
if ( primeNumber == 2 || primeNumber == 3 ) {
return 1;
} else if ( primeNumber <= 1 || primeNumber % 2 == 0 ) {
return 0;
} else {
for ( int i = 3; i < primeNumber; i += 2 ) {
if ( primeNumber % i == 0 ) {
return 0;
}
}
return 1;
}
}
int value() {
return prime[n-1];
}
void next() {
int i = 2;
for ( ; !isPrime(prime[n - 1] + i); i += 2 ) {}
prime[n] = prime[n-1] + i;
n += 1;
}
void initPrimeArray( int n ) {
if ( n == 1 ) {
prime[0] = 2;
} else if ( n == 2 ) {
prime[1] = 3;
} else {
int count = n - 2;
for ( int i = 5; i > 0; i += 2 ) {
if ( isPrime(i) ) {
count -= 1;
}
if ( count == 0 ) {
prime[n-1] = i;
break;
}
}
}
}
};
【问题讨论】:
-
为什么要包含 .cpp 文件?你真的不想那样做。我们还需要查看 PrimeIterator.cpp 的内容,因为目前我们还不知道它在做什么。