黑马程序员技术交流社区

标题: 求大神进来解决一个问题,谢谢 [打印本页]

作者: Dance小飞    时间: 2015-1-10 10:50
标题: 求大神进来解决一个问题,谢谢
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3. 编程找出999以内的所有完数。
#include<stdio.h>
int main()
{
    int a, b, c;
    for(a=1; a<=999;a++){
        c=0;
        for(b=1; b<=a/2; b++)
            if(a/b==0)
                c+=b;
        if(a==c)
            printf("%d\n", a);
    }
   
    return 0;
   
   
}

编译也没出问题,没报错,就是不出结果,谢谢
作者: 皮拉夫大王    时间: 2015-1-10 10:56
a/b==0?为什么不是a%b==0
作者: mengxingdong    时间: 2015-1-10 13:14
C变量永远为0呢。肯定没有值
作者: 仰望的繁华    时间: 2015-1-10 13:47
a/b==0  和  a%b==0
一个是a=0时成立。
一个是可以整除时成立。
作者: kenloo    时间: 2015-1-12 08:50
#include <stdio.h>

int main()

{
    int a,yinZi,sum;//定义一个要判断是否为完数的目标变量a,要判断是否为a的因子的变量yinZi,以及因子之和sum.
    for(a=1;a<1000;a++)//a从1到999自增
        
    {
        sum= 0;
        for(yinZi=1;yinZi<a;yinZi++)//因子肯定是要小于a的
            
        {
            
            if(a%yinZi==0)//判断a能否被yinZi整除,如果可以,进行求和
               
            {
               
                sum= sum+yinZi;
               
            }
            
        }
        
        if(sum==a)//判断sum的值是否等于a,如果等于a,则a是完数
            
        {
            
            printf("%d  ",a);//输出结果
            
        }
        
    }

printf("\n");//为了格式好看,换行

}

作者: 张传宾    时间: 2015-1-12 08:53
/**
* 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3. 编程找出999以内的所有完数。(C语言)
*/
#include<stdio.h>

int IsPerfectnum(int n)//构造函数IsPerfectnum,判断n是否为完数
{
        int i,s;
        s=0;
        for(i=2;i<=n/2;++i)//从2到n/2,寻找n的因子
        {
                if(n%i==0)
                {
                        s=s+i;
                }
        }
        ++s;//加上因子1
        return s;
}
int main()
{
        int IsPerfectnum(int n);
        int n;
        for(n=2;n<=999;++n)//因为0、1不符合完数定义,故从2开始到999,挨个判断n是否为完数
        {
                if(n==IsPerfectnum(n))
                        printf("%d\t",n);//输出完数
        }
        printf("\n");
        return 0;
}

作者: 张传宾    时间: 2015-1-12 08:55
皮拉夫大王 发表于 2015-1-10 10:56
a/b==0?为什么不是a%b==0

你回答的对!
作者: liu1170486003    时间: 2015-1-12 11:10
楼主你好,
摩除运算%才是判断一个数是否可以被另一个数整除的运算符,a%b==0证明a能被b整除。
所以修改你的内层循环即可.
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int a, b, c;
  5.     for(a=1; a<=999;a++){
  6.         c=0;
  7.         for(b=1; b<=a/2; b++)
  8.             if(a%b==0)//修改这里
  9.                 c+=b;
  10.         if(a==c)
  11.             printf("%d\n", a);
  12.     }
  13.    
  14.     return 0;
复制代码

作者: haojuncong    时间: 2015-1-12 14:12
if(a/b==0) 改成 if(a%b==0)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2