A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Dance小飞 中级黑马   /  2015-1-10 10:50  /  2048 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如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;
   
   
}

编译也没出问题,没报错,就是不出结果,谢谢

8 个回复

倒序浏览
a/b==0?为什么不是a%b==0
回复 使用道具 举报 1 0
C变量永远为0呢。肯定没有值
回复 使用道具 举报
a/b==0  和  a%b==0
一个是a=0时成立。
一个是可以整除时成立。
回复 使用道具 举报
#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");//为了格式好看,换行

}
回复 使用道具 举报
/**
* 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如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-10 10:56
a/b==0?为什么不是a%b==0

你回答的对!
回复 使用道具 举报
楼主你好,
摩除运算%才是判断一个数是否可以被另一个数整除的运算符,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;
复制代码
回复 使用道具 举报
if(a/b==0) 改成 if(a%b==0)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马