C语言输入n,判断n是不是完数

2024-12-17 11:09:38
推荐回答(4个)
回答1:

/*
**算法思路:一个数如果恰好等于它的因子之和,这个数就称为“完数”。
首先,求出这个数的所有因子,并将这些因子进行累加,如果该数的因子恰好等于该数本身,则该数是完数,否则不是。
*/
#include 
//判断是否为完数的函数
int isWanshu(int x)
{
int i,sum=0;
for(i=1;i if(x%i == 0) //判断i是否是x的因子
sum+=i;  //如果是,则将该因子累加
if(sum == x)     //如果因子的累加和恰好等于x,则返回1,否则返回0
return 1;
else
return 0;
}
int main()
{
int n;
scanf("%d",&n);
if(isWanshu(n))  //调用函数isWanshu(),如果函数返回值为真,则n是完数,否则不是
printf("%d is a perfect number\n",n);
else
printf("%d is not a perfect number\n",n);
return 0;
}

回答2:

#include 
int main(void)
{
 int n, sum, i;
 while (scanf("%d", &n) == 1) // 输入字母结束循环
 {
  for (i = 1, sum = 0; i < n; ++i)
  {
   if (n % i == 0)
    sum += i;
  }
  if (sum == n)
   puts("YES");
  else
   puts("NO");
 }
 return 0;
}

回答3:

#include

void iswanshu(int x);

void main()

{
    int a;
    printf("判断是否是完数:\n请输入一个整数:");
    scanf("%d",&a);
    iswanshu(a);//调用下面的函数
}

//定义一个判断是否是完数的函数

void iswanshu(int x)

{
    int i,k;
    for(i=1;i    {
        if (x%i=0) k=k+i;//如果被判断的那个数整除i余数为0则累加到k
    }

    //如果k等于x那输出的数就是完数
    if(k=x)
    {
        printf("%d是完数\n",x);
        printf("%d=1",x);
        for(i=2;i        {
            if (x%i=0) printf("+%d",i);
        }
        printf("\n");

    }
    else
    printf("%d不是完数!",x);

}

回答4:

#include 
int IsData(int Data);
int IsData(int nData)
{
    if(n<6) return 0;
    int temp,sum;//X表示要判断的数,temp表示数的因子,sum表示因子之和.
    sum= 0;
    for(temp=1;temp    {
       //判断x能否被temp整除,如果可以,则是因子,进行求和
       if(x%temp==0)
       {
        sum= sum+temp;
       }
     }
     if(sum==nData)    return 1;
     else return 0;
}

int main()
{
    int n;
    scanf("%d",&n);
    if(IsData(n)==1)
    {
        printf("%d是完数\n",n);
    }
    else
    {
         printf("%d不是完数\n",n);
    }
    
}