2017湖南多校第一场-F(1005): Federation Favorites

来源:互联网 发布:软件开发学徒骗局 编辑:程序博客网 时间:2024/04/29 14:21

F(1005): Federation Favorites
Submit Page Summary Time Limit: 5 Sec Memory Limit: 128 Mb Submitted: 46 Solved: 23
Description
En route to Rigel 7, Chief Engineer Geordi Laforge and Data were discussing favorite numbers. Geordi exclaimed he preferred Narcissistic Numbers: those numbers whose value is the same as the sum of the digits of that number, where each digit is raised to the power of the number of digits in the number. Data agreed that Narcissistic Numbers were interesting, but not as good as his favorite: Perfect Numbers. Geordi had never heard of a Perfect Number, so Data elaborated, \A positive integer is said to be Perfect if it is equal to the sum of its positive divisors less than itself. For example, 6 is Perfect because 6 = 1 + 2 + 3.” Geordi began thinking about an algorithm to determine if a number was Perfect, but did not have the raw computing ability of Data. He needs a program to determine if a given number is Perfect. Help Geordi write that program.

Input
Input consists of a single entry per line. Each line contains a single positive integer n, where 2 < n < 100; 000 for each case. A line containing -1 denotes the end of input and should not be processed.

Output
For each case, determine whether or not the number is Perfect. If the number is Perfect, display the sum of its positive divisors less than itself. The ordering of the terms of the sum must be in ascending order. If a number is not Perfect, print \ is NOT perfect.” where is the number in question. There must be a single space between any words, symbols, or numbers in all output, with the exception of the period at the end of the sentence when a number is not perfect.

Sample Input
6
12
28
-1
Sample Output
6 = 1 + 2 + 3
12 is NOT perfect.
28 = 1 + 2 + 4 + 7 + 14

题目大意:判断一个数是不是完全数(完美数)
解题思路:找出该数的所有因子,直接判断即可

#include<iostream>#include<cstdio>#include<string>using namespace std;int fac[500];int main(){    while(true)    {        int num;        scanf("%d",&num);        if(num==-1) break;        int sum=1;        int nFacs = 1;        fac[0]=1;        for(int i=2;i<=num/2;i++)        {            if(num % i == 0)            {                sum += i;                fac[nFacs++] = i;            }        }        if(sum==num)        {            printf("%d = %d",num,fac[0]);            for(int i=1;i<nFacs;i++)                printf(" + %d",fac[i]);            printf("\n");        }else        {            printf("%d is NOT perfect.\n",num);        }    }}/*66 = 1 + 2 + 32828 = 1 + 2 + 4 + 7 + 14496496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 24881288128 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 127 + 254 + 508 + 1016 + 2032 + 40643355033633550336 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256 + 512 + 1024 + 2048 + 4096 + 8191 + 16382 + 32764 + 65528 + 131056 + 262112 + 524224 + 1048448 + 2096896 + 4193792 + 8387584 + 16775168*/
0 0
原创粉丝点击