2

问题是:“编写一个函数来确定一个数字是质数还是完美数。”

到目前为止,我首先完成了完美的部分,这就是我所拥有的:

#include <iostream>
using namespace std;
bool perfectNumber(int);
int main()
{
 int number;

 cout<<"Please enter number:\n";
 cin>>number;
 bool perfectNumber(number);

 return 0;
}
bool perfectNumber(int number)
{
 int i;

 int sum=0;
 for(i=1;i<=number/2;i++)
 {
  if(number%i==0)
  {
   sum+=i;
  }
 }
 if (sum==number)
  return i;
 else
  return 0;
}

但是,此代码似乎有错误。我看过这本书,但没有谈到这个话题。我想获得有关如何修复此代码的建议。

谢谢!

4

4 回答 4

7
bool perfectNumber(number);

这不会调用perfectNumber函数;perfectNumber它声明了一个名为type的局部变量,并用转换为 typebool的值初始化它。numberbool

为了调用该perfectNumber函数,您需要使用以下内容:

bool result = perfectNumber(number);

或者:

bool result(perfectNumber(number));

另一方面:如果您要从流中读取输入(例如cin>>number),您必须检查以确保从流中提取值成功。就像现在一样,如果您输入asdf,提取将失败并且number未初始化。检查提取是否成功的最好方法是简单地测试流的状态:

if (cin >> number) {
    bool result = perfectNumber(number);
}
else {
    // input operation failed; handle the error as appropriate
}

您可以在Semantics of flags onbasic_ios中了解有关如何设置和重置流错误状态的更多信息。您还应该查阅一本好的入门级 C++ 书籍,以了解更多流使用的最佳实践。

于 2010-12-12T21:08:07.537 回答
1
 bool isPerfect(  int number){
     int i;
     int sum=0;
     for(i=1;i<number ;i++){
         if(number %i == 0){
             cout<<"  " << i ;
             sum+=i;
         }
     }

     if (sum == number){
         cout<<"\n \t\t THIS NUMBER  >>>  "<<  number <<"   IS    PERFECT \n\n";
         return i;
     }else if (sum |= number) {
               cout<<"\nThis number >>> " <<  number <<"   IS  NOT  PERFECT \n\n";
               return 0;
     }
 }
于 2013-11-30T17:33:23.503 回答
1
void primenum(long double x) {
    bool prime = true; 
    int number2;
    number2 = (int) floor(sqrt(x));// Calculates the square-root of 'x'

    for (int i = 1; i <= x; i++) {
        for (int j = 2; j <= number2; j++) {
            if (i != j && i % j == 0) {
                prime = false;
                break;
            }
        }
        if (prime) {
            cout << " " << i << " ";
            c += 1;
        }
        prime = true;
    }
}
于 2010-12-12T21:11:04.430 回答
-1
#pragma hdrstop

#include <tchar.h>
#include <stdio.h>
#include <conio.h>
//---------------------------------------------------------------------------


bool is_prim(int nr)
{

    for (int i = 2; i < nr-1; i++) {

    if (nr%i==0) return false;

    }

    return true;

}

bool is_ptr(int nr)
{
    int sum=0;

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

    if (nr%i==0) {
        sum=sum+i;
    }

    }

    if (sum==nr) { return true;

    }
    else return false;
}
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
    int numar;

    printf ("Number=");scanf("%d",&numar);
    if (is_prim(numar)==true) { printf("The number is prime");

    }
    else printf("The number is not prime");

    if (is_ptr(numar)==true) { printf(" The number is perfect");

    }
    else printf(" The number is not perfect");
    getch();
    return 0;
}
于 2010-12-12T21:21:48.973 回答