大概看了一下,你判斷是否為因子的地方有問題,應(yīng)該用取余運算符號:%
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供海珠網(wǎng)站建設(shè)、海珠做網(wǎng)站、海珠網(wǎng)站設(shè)計、海珠網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、海珠企業(yè)網(wǎng)站模板建站服務(wù),十余年海珠做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
用除號是不行的,呵呵。
另外,你把求一個數(shù)的因子和,寫成一個函數(shù),這樣的話,程序看起來更明了,你也不容易混亂。
求因子和的函數(shù)如下:
int?sumf(int?num)
{
int?i,sum?=?0;
for(i?=?1;i?=?num;?i?++)
{
if(num?%?i?==?0)
{
sum?+=?i;?
}???
}
return?sum;
}
不過你所說的因子是否包含了1和數(shù)本身?如果包含的話,我運行了一下,2到1000好像沒發(fā)現(xiàn)有滿足條件的。
如果不包含1和本身,倒是有幾個,全程序是這樣:
#include?stdio.h
#include?stdlib.h
int?main(void)
{???int?i;?
for(i?=?2;?i??1000;?i++)
{??????
//printf("%d--%d--%d\n",i,sumf(i),sumf(sumf(i)));
if(i?==?sumf(sumf(i)))
{
printf("%d????%d\n",i,sumf(i));
}????
}?
system("pause");
return?0;
}
int?sumf(int?num)
{
int?i,sum?=?0;
for(i?=?2;i??num;?i?++)
{
if(num?%?i?==?0)
{
sum?+=?i;?
}???
}
return?sum;
}
#includestdio.h
int main()
{
int a,b,n;
int facsum(int n,int *a,int *b);
printf("There are following friendly--numbers pair smaller than 500:\n");
for(a=1;a500;a++) /*窮舉500以內(nèi)的全部整數(shù)*/
{
n=facsum(n,a,b);
if(n==aa=b)
printf("%4dand%d\n",a,b); /*若n=a,則a和b是一對親密數(shù),輸出*/
}
}
int facsum(int n,int *a,int *b)
{
int i;
for(*b=0,i=1;i=*a/2;i++) /*計算數(shù)a的各因子,各因子之和存放于b*/
if(!(*a%i))
*b+=i; /*計算b的各因子,各因子之和存于n*/
for(n=0,i=1;i=*b/2;i++)
if(!(*b%i))
n+=i;
return n;
}
呵呵,樓主,你還是多看看函數(shù)的用法吧,先理清邏輯。
while(ia)
{
i=i+1;
這樣當i=a-1時,會進入循環(huán),然后i加1,變成了a,并參與了運算,因此會得出錯誤結(jié)果。
將以上代碼改為:(注意,第二個也要改)
while(++ia)
{
//i=i+1;
應(yīng)該就正確了。