决定一个数字是完美的还是素数

car*_*rla 2 c++ primes numbers modulus perfect-numbers

问题是:"写一个函数来找出一个数字是一个素数还是一个完整的数字."

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Jam*_*lis 7

bool perfectNumber(number);
Run Code Online (Sandbox Code Playgroud)

这不会调用perfectNumber函数; 它声明一个名为perfectNumbertype 的局部变量,bool并使用number转换为type 的值对其进行初始化bool.

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

bool result = perfectNumber(number);
Run Code Online (Sandbox Code Playgroud)

要么:

bool result(perfectNumber(number));
Run Code Online (Sandbox Code Playgroud)

另请注意:如果要从流中读取输入(例如cin>>number),则必须检查以确保从流中提取值成功.就像现在一样,如果你输入asdf,提取将失败并且number将保持未初始化状态.检查提取是否成功的最佳方法是测试流的状态:

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

您可以在标记的语义上basic_ios了解有关如何设置和重置流错误状态的更多信息.您还应该参考一本优秀的入门级C++书籍,了解更多流使用最佳实践.