重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
#include?stdio.h
站在用戶的角度思考問題,與客戶深入溝通,找到芒市網站設計與芒市網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創造個性化、用戶體驗好的作品,建站類型包括:成都網站制作、網站設計、企業官網、英文網站、手機端網站、網站推廣、主機域名、雅安服務器托管、企業郵箱。業務覆蓋芒市地區。
#define?MAX?100?/*100以內的完全數*/
int?main?(void)?{
int?x,temp,sum;?/*X表示要判斷的數,temp表示數的因子,sum表示因子之和*/
for?(x=1;?x=MAX;?x++)?{
sum=?0;
for(temp=1;?tempx;?temp++)?{?/*判斷x能否被temp整除,如果可以,則是因子,進行求和*/
if(x%temp==0)
sum=?sum+temp;
}
if(sum==x)?/*如果是完數,打印輸出*/
printf("%d\t",x);
}
putchar?('\n');
fflush?(stdin);
getch?();
return?0;
}
運行結果
兩個問題
1 結尾多打印了一個。
u為找到完美數的個數。 所以打印應該是從a[0]到a[u-1]
不應該打印a[u]
按照你的寫法, 循環應該是for(i = 0; i u-1; i ++)
然后下面一行打印a[u-1]
2 沒有處理u=0的情況。 單獨判斷一下, u=0時,輸出No
#includestdio.h
int?main()
{
int?i,n,sum;
int?a,b;
scanf("%d%d",a,b);
for(n=a;n=b;n++)
{
sum=0;
for(i=1;in;i++)
{
if(n%i==0)
{sum=sum+i;}
}
if(sum==n)
{printf("%4d",n);}
}
return?0;
}
兩個錯誤:
for(i=2;i=20000;i++)
{
a=0;
for(b=1;b=i-1;b++)
{
if(i%b==0)
{
a+=b;
//這里原來的判斷移出去,否則可能只判斷了一半的因子,就符合條件累加num了,比如:n=24,1+2+3+4+6+8=24, 這時滿足條件,num++;但是還有一個因子12沒加到a上,所以出錯
}
}
if(a==i)
{
num++;
}
if(num==n){
printf("%d\n",i);
break; //這里加上退出,否則例如:打印第一個完美數是6,直到找到第二個完美數28之前一直滿足num=n=1;所以會輸出7——27
}
}
return 0;
}
完數,即完全數(Perfect number),又稱完美數或完備數,是一些特殊的自然數。其所有的真因子(即除了自身以外的約數)的和(即因子函數),恰好等于本身。
根據該定義 可以得出判斷完數的函數如下:
#include?stdio.h
int?is_perfect_number(int?n)
{
int?i,s=0;
for(i?=?1;?i?=n/2;?i?++)
if(n%i?==?0)?s+=?i;//統計所有真因子的和。
if(s?==?n)?return?1;//如果與原值相等,則該數為完數。
return?0;//不是完數。
}
根據該函數,只需要對需要打印的范圍內所有數做遍歷,并逐一調用該函數判斷,如果返回1則打印即可。
完美數(Perfect number),又稱完全數或完備數,是一些特殊的自然數。該數所有的真因子(即除了自身以外的約數)的和(即因子函數),恰好等于本身。如果一個數恰好等于它的因子之和,則稱該數為“完美數”。
所以根據定義,可以得到判斷完美數的程序:
int?is_perfect_number(int?n)//對n進行判斷,如果是完美數,返回1,否則返回0.
{
int?j,sum?=?0;
sum=0;
for(j=1;jn;j++)//對每個小于n的正數進行遍歷,
if(n%j==0)//如果是因子,
sum=sum+j;//累加到sum上。
return?sum==n;//返回結果。
}