2

我正在编写一个代码,它将(希望)允许用户输入一个数字,并将输出 2 和该数字(包括)之间的素数之和。然而,我在代码的倒数第二行遇到了一个问题。我已经查找了此问题的其他解决方案,但它们似乎不是由与我相同的错误引起的。这是代码:

#include <iostream>

using namespace std;

int Q;

int sum_primes(int N) {

    cout << "Enter a number and I will generate the sums of the primes up to (and including) that number: ";
    cin >> Q;

    int i, count, sum = 0;

    for(N = 1; N <= Q; N++) {    
         count = 0;

         for(i = 2; i <= N/2; i++) {
             if (N % i == 0) {
                 count++;
                 break;
             }
         }

         if (count == 0 && N != 1)
             sum = sum + N;

         return N = sum;
    }
}

int main() {
    cout << "The sum of these primes is: " << sum_primes(int N);

   return 0;
}
4

3 回答 3

5
cout << "..." << sum_primes(int N);

替换int N为一个数字。你已经定义了函数,现在你需要给它一个参数。

或者,也许您想N通过用户输入来赋予 ' 价值。然后改用这个:

int N;

cin >> N;

cout << "The sum of these primes is: " << sum_primes(N);

此外,正如 GigaWatt 指出的那样,您所做的那一行:

return N = sum;

是不必要的。简单地返回sum也可以。

这是完整的代码:

#include <iostream>
#include <cmath>

bool isPrime(int x) {

    if (x == 1) return false;
    if (x == 2) return true;

    bool prime = true;
    for (int i = 2; i <= sqrt(x); i++) {
        if (x % i == 0) { prime = false; break; }
    }
    return prime;
}

int sum_primes(unsigned int N) {

    int sum = 0;

    for ( int i = 1; i <= N; i++ ) {

        if (isPrime(i)) sum += i;

    }
    return sum == 0 ? 1 : sum;
}

int main() {

    int Q;

    std::cin >> Q;

    std::cout << "Sum of primes " << sum_primes(Q);

}
于 2012-11-01T17:35:26.607 回答
1

事实上,这段代码存在多个问题。我会列出一些,但这绝不是详尽的!

  • 你的代码结构有些疯狂。我想当您修复简单的语法错误时,这将变得显而易见。作为一种风格,我将Q作为参数传递给sum_primesas well as N
  • 在询问“输入数字”之前,您要输出“这些素数的总和是”。
  • return N = sum将立即退出您的外部for循环。这几乎肯定不是你想要的。

我怀疑您需要寻找比您目前正在使用的更好的 C++ 介绍。恐怕我不能给你任何建议。

于 2012-11-01T17:47:06.227 回答
0

您对 sum_primes 的论点不正确。

该函数被定义为采用 int,但您没有传递它。

于 2012-11-01T17:35:49.990 回答