大概看了一下,你判斷是否為因子的地方有問(wèn)題,應(yīng)該用取余運(yùn)算符號(hào):%
成都創(chuàng)新互聯(lián)公司提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì),成都品牌網(wǎng)站建設(shè),廣告投放等致力于企業(yè)網(wǎng)站建設(shè)與公司網(wǎng)站制作,十年的網(wǎng)站開(kāi)發(fā)和建站經(jīng)驗(yàn),助力企業(yè)信息化建設(shè),成功案例突破1000+,是您實(shí)現(xiàn)網(wǎng)站建設(shè)的好選擇.
用除號(hào)是不行的,呵呵。
另外,你把求一個(gè)數(shù)的因子和,寫成一個(gè)函數(shù),這樣的話,程序看起來(lái)更明了,你也不容易混亂。
求因子和的函數(shù)如下:
int?sumf(int?num)
{
int?i,sum?=?0;
for(i?=?1;i?=?num;?i?++)
{
if(num?%?i?==?0)
{
sum?+=?i;?
}???
}
return?sum;
}
不過(guò)你所說(shuō)的因子是否包含了1和數(shù)本身?如果包含的話,我運(yùn)行了一下,2到1000好像沒(méi)發(fā)現(xiàn)有滿足條件的。
如果不包含1和本身,倒是有幾個(gè),全程序是這樣:
#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是一對(duì)親密數(shù),輸出*/
}
}
int facsum(int n,int *a,int *b)
{
int i;
for(*b=0,i=1;i=*a/2;i++) /*計(jì)算數(shù)a的各因子,各因子之和存放于b*/
if(!(*a%i))
*b+=i; /*計(jì)算b的各因子,各因子之和存于n*/
for(n=0,i=1;i=*b/2;i++)
if(!(*b%i))
n+=i;
return n;
}
呵呵,樓主,你還是多看看函數(shù)的用法吧,先理清邏輯。
#include
stdio.h
#include
conio.h
int
facsum(int
n)
{
int
sum=0;
for
(int
i=1;in;i++)
{
if(n%i==0)
sum+=i;
}
return
sum;
}
main()
{
for
(int
i=1;i=500;i++)
{
int
M1=facsum(i);
if
(facsum(M1)==ii=M1)
{
printf("%d和%d互為親密數(shù)\n",i,M1);
}
}
}
可以嗎?輸出要有文字說(shuō)明,你可以自己改printf("%d和%d互為親密數(shù)\n",i,M1);這句話就行了。