首页 > 解决方案 > 显示完美数字及其加法器

问题描述

我需要程序帮助才能在标准输出中显示前 4 个完美数字以及函数完美(int,int*)。这个函数的参数是自然数和你需要写加法器的地址(我想是完美的数字)。如果数字是完美的,函数必须返回 1,否则返回 0。这是我到目前为止所做的。请帮忙。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int perfect(int,int*);

int main()
{
int *arr,a;
int i,j;

perfect(a,arr);
}

int perfect(int n,int *arr)
{
int lim=8128,i,sum;

for(n=1;n<=lim;n++)
{
sum=0;
for(i=1;i<n;i++)
{
if(n%i==0)
{
sum=sum+i;
}

}
if(n==sum)
printf("%d ",n);


}
}

标签: cmathnumbersperfect

解决方案


我认为这段代码对你有帮助。完美函数完美时返回1,否则返回0。divisor用于收集地址的全局数组。当perfect函数返回 1 时,我打印除数数组并启动deivisor_count =0. 请看一看:


#include<stdio.h>
#include<stdlib.h>
#include<string.h>


int divisor[1000], deivisor_count = 0;

int perfect(int n)
{
   int sum=0, i, j = 0;
   for(i=1;i<n;i++)
    {
        if(n%i==0)
        {
           sum=sum+i;
           divisor[deivisor_count]= i;
           deivisor_count = deivisor_count + 1;
        }
    }
    if(n==sum){
        return 1;
    }
   
    return 0;
}


int main()
{
   
    int i, j =0, is_perfact, n=100000, k;
    
    for (i =2 ; i<=n; i++){
         deivisor_count = 0;
         is_perfact = perfect(i);
         
         if(is_perfact == 1){
             j = j + 1;
             for(k = 0; k <deivisor_count; k++){
                 printf("%d", divisor[k]);
                 if (deivisor_count -1 == k){
                     printf("=");
                 }
                 else{
                     printf("+");
                 }
             }
             printf("%d\n", i);
         }
         if (j==4){
             break;
         }
    }
   return 0;
}

推荐阅读