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;
}
展开
 我来答
bhtzu
推荐于2016-10-08 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4196万
展开全部
    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.
楼上正解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shine1991
科技发烧友

2014-11-01 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部
#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;
}

逻辑问题,不解释

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式