C ++完全数。需要一些帮助修订
-
20-09-2019 - |
题
我需要一些帮助修订本。它只有显示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;
解决方案
我不知道,但我猜的代码:
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;
}
其他提示
您永远不会设置prevtemp
为0以外任何东西,因此增加它temp
什么都不做。
我相信你的意思是说
if ((perfect % divisor) == 0)
temp += divisor; // not "divisor = prevtemp;"
在线“临时= prevtemp + TEMP”也应与该溶液中除去;不再有任何需要对prevtemp
变量。
另外,也没有必要另备limit
和divisor
变量,因为它们总是相同的。只是删除limit
和改变使用divisor
循环条件。
此外,马克拜尔斯指出,循环会更容易理解,如果你重构它变成一个for
循环而不是while
。
好像你正在它太复杂了。这里是你如何能做到这一点:
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),并当所述数目是一种精确除数仅增加。
您永远不会指派任何初始化它prevtemp
后0
,所以有什么要补充的temp
上读取temp = prevtemp + temp
行了。
#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;
}