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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 FlyTrem 于 2014-3-23 17:39 编辑

帮忙找出问题在哪!!!!
编程找出999以内的完数。完数如:6=1+2+3.
下面是我的代码:
#include<stdio.h>
int main()
{
    int sum = 0, i, j;
    //历遍1到998所有的的整数
    for ( i = 1 ; i < 999 ; i++)
    {
        //历遍小于 (i /2),大于0的所有整数
        for( j = 0 ; j <= ( i / 2 )  : i++ )
           
             if ( i % j == 0)
            
               //求所有能被 i 整除数的和
               sum = sum +  j;
        
        //如果sum和n的值相等
        if ( sum == n)
          printf("%d",n);
     }
    return 0;
}

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

6 个回复

倒序浏览
这是你的代码:
#include<stdio.h>
int main()
{
    int sum = 0, i, j;
    //历遍1到998所有的的整数
    for ( i = 1 ; i < 999 ; i++)
    {
        //历遍小于 (i /2),大于0的所有整数
        sum = 0;     //在这里加上一句,对sum 清空
        for( j = 1 ; j <= ( i / 2 )  : j++ )  // j可以从1开始,    后面i++ 改为 j++
           
             if ( i % j == 0)
            
               //求所有能被 i 整除数的和
               sum = sum +  j;
        
        //如果sum和n的值相等
        if ( sum == i)   // n没值 , n也没定义,但可以说是 i,      改为i
          printf("%d",i);
     }
    return 0;
}
不知道你明白了没

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
如果一个数恰好等于它的因子之和,则称该数为“完全数”。就是楼主所说的完数。
也就是说完数是一种特殊的非质数。
判断方法应该是
1-999内的非质数数组中,有多少 非质数是完全数【用i遍历1-999, if  i=因子数和,printf这个i】
楼主的错误:
1.算法错误
2.条件判断用错了,if(==n)n是什么都没定义,实在不行你把n写成个完数枚举也可以。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
keycola 发表于 2014-3-16 10:23
这是你的代码:
#include
int main()

嗯  谢谢 明白问题在哪了
回复 使用道具 举报
董月峰 发表于 2014-3-16 10:33
如果一个数恰好等于它的因子之和,则称该数为“完全数”。就是楼主所说的完数。
也就是说完数是一种特殊的 ...

嗯嗯。感谢给出答复!
回复 使用道具 举报
#include<stdio.h>
int main()
{
    int sum = 0, i, j;
    //历遍1到998所有的的整数
    for ( i = 1 ; i < 999 ; i++)
    {
        //历遍小于 (i /2),大于0的所有整数
        for( j = 0 ; j <= ( i / 2 )  : i++ ) // i++改为j++

            if ( i % j == 0)

                //求所有能被 i 整除数的和
                sum = sum +  j;

        //如果sum和n的值相等
        if ( sum == n) // 把n改为i
            printf("%d ",n); // 应该打印的时i或者sum,不是n,还有打印一个最好再加个空格将各个数分开!
        //打印完毕后,你这边还需要把sum清0才行!不然sum会一直累加!
        
        //清零sum
        sum = 0;
    }
    return 0;
}

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
脸皮猴 发表于 2014-3-16 11:49
#includeint main(){    int sum = 0, i, j;    //历遍1到998所有的的整数    for ( i = 1 ; i < 999 ; i++ ...

Thank you!!谢谢!!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马