我需要一些帮助来修改这个。它只保持显示0作为临时值。谢谢。
// A program to determine whether the input number is a perfect number
// A perfect number is defined by the sum of all its positive divisors excluding itself
// 28: 1+2+3+7+14 = 28.
int perfect, limit, divisor;
cout << "Please enter a positive integer in order to define whether it is a perfect integer or not: " ;
cin >> perfect;
cout << endl;
int temp = 0;
int prevtemp = 0;
limit = 1;
divisor = 1;
while (limit < perfect)
{
if ((perfect % divisor) == 0)
{
divisor = prevtemp;
temp = prevtemp + temp;
}
limit++;
divisor++;
}
if (perfect == temp)
cout << "Your number is a perfect number!" << endl;
else
cout << "Your number is not a perfect number" << endl;
return 0;
答案 0 :(得分:5)
您永远不会将prevtemp
设置为0以外的任何内容,因此将其添加到temp
不会做任何事情。
我相信你的意思是
if ((perfect % divisor) == 0)
temp += divisor; // not "divisor = prevtemp;"
此解决方案也应删除“temp = prevtemp + temp”行;不再需要prevtemp
变量。
此外,无需保留单独的limit
和divisor
变量,因为它们始终相同。只需删除limit
并更改循环条件即可使用divisor
。
另外,正如Mark Byers指出的那样,如果你将它重构为for
循环而不是while
,那么循环就会更容易理解。
答案 1 :(得分:2)
好像你让它变得太复杂了。这是你如何做到的:
int total = 0;
for (int i = 1; i < perfect; ++i)
{
if (perfect % i == 0)
total += i;
}
if (perfect == total)
cout << "Your number is a perfect number!" << endl;
else
cout << "Your number is not a perfect number" << endl;
请注意,运行总计保存在名为total
的变量中(您将此变量称为temp),并且只有在数字是精确除数时才会增加。
答案 2 :(得分:1)
我不确定,但我在代码中猜到了:
if ((perfect % divisor) == 0)
divisor = prevtemp;
您打算将其改为prevtemp=divisor
。这解决了一个明显的问题,但仍然留下了一些看起来不像你正在做的那样。例如,我无法弄清楚limit
打算完成什么 - 你初始化它并增加它,但据我所知,你永远不会使用它的值(好吧,我猜你使用它,但它的值总是与divisor
相同,所以我不确定你为什么认为你需要两者,或者limit
如何将其作为名称?
编辑:拥有limit
是有意义的。特别是,因子总是成对出现:一个小于或等于数字的平方根,一个与第一个相匹配的因子总是大于或等于数字的平方根。因此,您无需一直扫描数字本身以查找因子 - 您可以将数字的平方根设置为限制,并仅扫描到该点。对于您到目前为止找到的每个因素,匹配因子将为perfect/divisor
。既然你已经有一个工作的例子,我想我不妨只希望这不是功课,并发布一个例子:
bool is_perfect(int number) {
int limit = sqrt((double)number);
int sum = 1;
for (int i=2; i<=limit; i++)
if (number % i == 0)
sum += i + number/i;
return sum == number;
}
答案 3 :(得分:0)
在将prevtemp
初始化为0
后,您永远不会向temp
分配任何内容,因此在temp = prevtemp + temp
的行上没有任何内容可添加到{{1}}。
答案 4 :(得分:0)
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int n,i=1,sum=0;
cout<<"Enter a number: ";
cin >> n;
while(i<n){
if(n%i==0)
sum=sum+i;
i++;
}
if(sum==n)
cout << i << " is a perfect number";
else
cout << i << " is not a perfect number";
system("pause");
return 0;
}