while(ia)
昌平網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,昌平網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為昌平超過(guò)千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的昌平做網(wǎng)站的公司定做!
{
i=i+1;
這樣當(dāng)i=a-1時(shí),會(huì)進(jìn)入循環(huán),然后i加1,變成了a,并參與了運(yùn)算,因此會(huì)得出錯(cuò)誤結(jié)果。
將以上代碼改為:(注意,第二個(gè)也要改)
while(++ia)
{
//i=i+1;
應(yīng)該就正確了。
#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ù)的用法吧,先理清邏輯。
大概看了一下,你判斷是否為因子的地方有問(wèn)題,應(yīng)該用取余運(yùn)算符號(hào):%
用除號(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;
}
#include stdio.h
#define N 500
int result[N];
/* calculate one number */
int facsum(int n)
{
int sum = 0, i;
for (i = 1; i = n; i++) {if (n % i == 0) sum += i;}
return sum;
}
int swap (int begin, int end)
{
int temp;
temp = begin; begin = end; end = temp;
return 0;
}
int main()
{
int i, j ;
for (i = 0; i N; i++){
result[i] = facsum(i+1);
}
for (i = 1; i N; i++){
for (j = N; j i; j--){
if (result[j-1] result[j]) swap(j-1, j);
}
}
for (i = 0; i N; i++)
printf("%d\n", result[i]);
/* 上面是有序的因子之和 , 下面開(kāi)始判斷是不是親密對(duì)數(shù) */
for (i = 1; i = 20; i++){
if (facsum(facsum(i)) == i)
printf("%d and %d is inimite num!\n", i, facsum(i));
}
return 0;
}
#includestdio.h
#define N 3000Yzh();
void main()
{
/*int a; scanf("%d",a); printf("%d",Yzh(a));*/
int a,b,i,j;
for(i=2;iN;i++)
{
a = Yzh(i);
for(j=2;jN;j++)
{
b = Yzh(j);
if(a==j b==i ij) //因?yàn)橐〉臄?shù)在前面所以應(yīng)該是小于
printf("(%d,%d)",i,j);
}
}
}
int Yzh(int x)
{
int n,sum=0;
for(n=1;n=x/2;n++)
{
if(x%n==0)
sum+=n;
}
return sum;//因?yàn)槟阍谥骱瘮?shù)中會(huì)用到因子的和這個(gè)值,所以你必須要把調(diào)用函數(shù)的值返回給主函數(shù)
}
這是我修改的你的代碼,輸出符合你的要求,不過(guò)3000以內(nèi)的親密數(shù)好像只有3對(duì)