首页 > 解决方案 > 寻找完美数的程序:输出错误。完美数是因数之和等于给定数的数

问题描述

#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");
}

标签: cruntime-error

解决方案


你为什么要这样做,你需要得到所有适当除数的总和(自然数的适当除数是严格小于数字的除数)num,但是你正在做的是加rem = num%i,基本上总是0因为可以被你检查的num内容整除,所以你所做的没有任何意义iif

if(num%i==0)
{
    rem=num%i;  // here `rem` is always `0` as `num%i == 0`
    sum=sum+rem;  
}

相反,您的逻辑应该如下所示,因为除数是,所以i您应该在您的inumisum

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

推荐阅读