C语言 求亲密数 问题。大神请进!
若正整数A的全部约数(包括1,不包括A本身)之和等于B;且整数B的全部约数(包括1,不包括B本身)之和等于A,则A、B为亲密数。编程,输入正整数A,输出亲密数A,B(A<...
若正整数A的全部约数(包括1,不包括A本身)之和等于B ; 且整数B的全部约数(包括1,不包括B本身)之和等于A,则 A 、 B 为亲密数。编程,输入正整数A,输出亲密数 A , B(A<=B) ,若不存在亲密数,则输出 No output 。
例如:220的约数是:1、2、4、5、10、11、20、22、44、55、110,约数之和是284;284的约数是:1、2、4、71、142,约数之和是220。所以220和284就是一对亲密数。
输入 一个正整数
输出 如果有亲密数,按照220-284格式输出;否则输出No output
看我写的程序,我觉得对着呢,可是为什么错了?
答案和我思路一样,就是用For写的,为甚么我的就错了??
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,i=0,j=0,n=0,p=0;
scanf("%d",&a);
while(i<a)
{
i=i+1;
if(a%i==0)
{
n=n+i;
}
}
while(j<n)
{
j=j+1;
if(n%j==0)
{
p=p+j;
}
}
if(a==p)
printf("%d-%d\n",a,n);
else
printf("No output\n");
return 0;
} 展开
例如:220的约数是:1、2、4、5、10、11、20、22、44、55、110,约数之和是284;284的约数是:1、2、4、71、142,约数之和是220。所以220和284就是一对亲密数。
输入 一个正整数
输出 如果有亲密数,按照220-284格式输出;否则输出No output
看我写的程序,我觉得对着呢,可是为什么错了?
答案和我思路一样,就是用For写的,为甚么我的就错了??
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,i=0,j=0,n=0,p=0;
scanf("%d",&a);
while(i<a)
{
i=i+1;
if(a%i==0)
{
n=n+i;
}
}
while(j<n)
{
j=j+1;
if(n%j==0)
{
p=p+j;
}
}
if(a==p)
printf("%d-%d\n",a,n);
else
printf("No output\n");
return 0;
} 展开
3个回答
展开全部
while(i<a)
{
i=i+1;
这样当i=a-1时,会进入循环,然后i加1,变成了a,并参与了运算,因此会得出错误结果。
将以上代码改为:(注意,第二个也要改)
while(++i<a)
{
//i=i+1;
应该就正确了。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-11-01
展开全部
循环中多了一次,当i=a-1时,符合循环,i=i+1(i=a);然后就多了a本身这个约数
把限制条件改为while(i<a/2),while(j<n/2)即可;因为任何数的最大约数除了本身之外不大于那个数的一半。如35是17,78是39.
楼上正解
把限制条件改为while(i<a/2),while(j<n/2)即可;因为任何数的最大约数除了本身之外不大于那个数的一半。如35是17,78是39.
楼上正解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,i=0,j=0,n=0,p=0;
scanf("%d",&a);
while(i<a-1)//<-------------
{
i=i+1;
if(a%i==0)
{
n=n+i;
}
}
while(j<n-1)//<-------------
{
j=j+1;
if(n%j==0)
{
p=p+j;
}
}
if(a==p)
printf("%d-%d\n",a,n);
else
printf("No output\n");
return 0;
}
逻辑问题,不解释
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询