1994年のMicrosoftエンカルタ内の記事数論より:A、B、Cが整数である場合、」= BCは、BまたはCの、aとbまたはcの倍数と呼ばれているようにはの除数または因子と呼ばれています。cは1 / -1でない場合、Bは、の適切な除数と呼ばれています。0を含んでも整数、例えば、2の倍数である-4、0、2、10。奇数の整数、-5、例えば、偶数でない整数である。1、3、9 A完全数は、すべての正の、適切な除数の和に等しい正の整数です。例えば、+ 7 1 + 2 + 4 + 14に等しい1 + 2 + 3に等しい6、および28は、完全数です。完璧ではない正の数は不完全であり、欠損又はその正の和は、適切な除数が数自体よりも小さいか大きいか否かに応じて豊富です。したがって、図9に示すように、適切な除数1,3と、欠損しています。12、
それは完璧な、豊富な、または不足している場合の数を考えると、決定します。
入力
0は、リストの終わりをマークする1 <N <100 AとNの正の整数のAリスト(60,000よりなし大きいです)。
出力
出力の最初の行はPERFECTION出力をお読みください。出力の次のN個の行は以下の例に示すように、それは、完全な、欠損、または豊富であるか否かを各入力整数をリストするべきです。フォーマット数:エコー整数は右、2つの空白が続き、出力行の最初の5つのスペースの中に正当化されるべきは、整数の説明が続きます。出力の最後の行は、出力の最後をお読みください。
サンプル入力
15 28 6 56 60000 22 496 0
サンプル出力
PERFECTION出力
15欠乏
28 PERFECT
6 PERFECT
56豊富
60000豊富な
22欠損
496 PERFECTの
出力の最後
の質問の意味:
数を考えると、それは、完璧なリッチ又は不十分であることを確認して
完全数は正の整数であるそのすべて正、適切に等しい:例除数は、1 + 2 + 4 + 7 + 14が完全数は、例えば、3.28に等しく、6 + 2 + 1に等しいです。完璧ではない正の数が正の数に基づいて、完璧ではない、本当の除数未満またはそれ以上の数自体の合計よりも、それは不良品や豊富です。したがって、適切9 1,3-除数では不十分である。適切な除数12 1,2,3,4,6-で十分です。
注:
1、入力の標題複数のそれぞれについて、デジタル入力が記載されている判定
2、「0」、入力端
3、「PERFECTION OUTPUT」出力に一度だけ
4、音符の出力フォーマットその
コード:
#include <stdio.h>
#include <algorithm>
using namespace std;
const int maxn=1e5+5;
int a[maxn];
int flag; //此处定义的全局变量flag 方便在主函数里面应用
int judge(int n) //编写一个判断该数是完美,缺陷还是丰富
{
int i;
int j=0;
int sum = 0;
for(i=1; i<=n/2; i++) //注意此处的i<=n/2;
if(n%i==0)
{
sum+=i;
}
if(sum==n)
flag=1;
else if(sum>n)
flag=2;
else
flag=3;
}
int main()
{
int n=1;
while(scanf("%d",&a[n]),a[n]) //本题的注意点,本题需要一次性输入很多数,输入0时结束输入
{
n++;
}
printf("PERFECTION OUTPUT\n"); //此处的"PERFECTION OUTPUT\n"只需要输出一遍
for(int i=1;i<n;i++) //接下来需要特别针对每个数进行判断说明,故用数组循环表示
{
if(judge(a[i])&&flag==1)
{
printf("%5d PERFECT\n", a[i]); //字符宽度为5,且右对称 后面还需要加两个空格
}
if(judge(a[i])&&flag==2)
{
printf("%5d ABUNDANT\n", a[i]);
}
if(judge(a[i])&&flag==3)
{
printf("%5d DEFICIENT\n", a[i]);
}
}
printf("END OF OUTPUT\n"); //在输入“0”后结束输入,都会输出“END OF OUTPUT\n” 否则一直处在循环内不会输出“END OF OUTPUT\n”
return 0;
}
ヒント:
この問題の入力と出力は、非常に洗練されて学ぶことを学ぶことができます。