C语言 - 1000以内的完数

C语言 - 1000以内的完数

/*    
    一个数如果恰好等于它的真因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而
6 = 1 + 2 + 3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其真因子:
    
    6 its factors are 1,2,3
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>

int num_int = 1001;//num从3遍历到1000//number
int fac_inta[1000];//真因子//factor

int main(int argc, char const *argv[])
{
    SetConsoleCP(65001);
    SetConsoleOutputCP(65001);//调整终端字符编码方式
    while(--num_int >= 3)
    {
        int sum_int = 0;
        int facnum_int = 0;    //factor number
        for (int try_int = 1; try_int <= (int)(sqrt(num_int)); ++try_int)
                                                            //寻找(真)因子
        {
            if (num_int % try_int == 0)
            {
                sum_int += (num_int / try_int + try_int);
                fac_inta[facnum_int] = try_int;
                facnum_int++;
                if (facnum_int != 1)
                {
                    fac_inta[facnum_int] = num_int / try_int;
                    facnum_int++;
                }
            }
        }
        sum_int -= num_int;//剔除本身(非真因子)
        if (sum_int == num_int)
        {
            printf("%d its factors are 1", num_int);
            for (int facindex_int = 1; facindex_int < facnum_int;
                ++facindex_int)                          //factor index
            
            {
                printf(",%d", fac_inta[facindex_int]);
            }
            printf("\n\n");
        }
    }
    system("pause");
    return 0;
}
发布了19 篇原创文章 · 获赞 23 · 访问量 3906

猜你喜欢

转载自blog.csdn.net/weixin_43737206/article/details/88853498