求完美数的程序:输出错误。完全数是其因子之和等于给定数的数
program to find perfect number : error in output . perfect number is number whose sum of factors equals the given number
#include<stdio.h>
#include<math.h>
int main()
{
int rem, num, i, sum;
sum=0;
num=28;
for(i=1;i<num;i++)
{
if(num%i==0)
{
rem=num%i;
sum=sum+rem;
}
}
if(sum==num)
{
printf("perfect number");
}
else
printf("not perfect");
}
你为什么要这样做,你需要得到num
的所有真约数的总和(自然数的真约数是严格小于该数的约数),但是什么您正在做的是添加 rem = num%i
,这基本上总是 0
,因为 num
可以被 i
整除,您在 if
中检查的内容,所以您在做什么没有任何意义
if(num%i==0)
{
rem=num%i; // here `rem` is always `0` as `num%i == 0`
sum=sum+rem;
}
而你的逻辑应该如下所示,因为除数是 i
所以你应该添加所有除数(当 num
被 [=16 整除时用 i
表示=]) 在你的 sum
if(num%i==0)
{
sum = sum + i;
}
#include<stdio.h>
#include<math.h>
int main()
{
int rem, num, i, sum;
sum=0;
num=28;
for(i=1;i<num;i++)
{
if(num%i==0)
{
rem=num%i;
sum=sum+rem;
}
}
if(sum==num)
{
printf("perfect number");
}
else
printf("not perfect");
}
你为什么要这样做,你需要得到num
的所有真约数的总和(自然数的真约数是严格小于该数的约数),但是什么您正在做的是添加 rem = num%i
,这基本上总是 0
,因为 num
可以被 i
整除,您在 if
中检查的内容,所以您在做什么没有任何意义
if(num%i==0)
{
rem=num%i; // here `rem` is always `0` as `num%i == 0`
sum=sum+rem;
}
而你的逻辑应该如下所示,因为除数是 i
所以你应该添加所有除数(当 num
被 [=16 整除时用 i
表示=]) 在你的 sum
if(num%i==0)
{
sum = sum + i;
}