黑马程序员技术交流社区

标题: 程序运行结果与设计想法不一样,帮忙找问题!!! [打印本页]

作者: FlyTrem    时间: 2014-3-16 09:20
标题: 程序运行结果与设计想法不一样,帮忙找问题!!!
本帖最后由 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;
}
作者: keycola    时间: 2014-3-16 10:23
这是你的代码:
#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;
}
不知道你明白了没

作者: 董月峰    时间: 2014-3-16 10:33
如果一个数恰好等于它的因子之和,则称该数为“完全数”。就是楼主所说的完数。
也就是说完数是一种特殊的非质数。
判断方法应该是
1-999内的非质数数组中,有多少 非质数是完全数【用i遍历1-999, if  i=因子数和,printf这个i】
楼主的错误:
1.算法错误
2.条件判断用错了,if(==n)n是什么都没定义,实在不行你把n写成个完数枚举也可以。
作者: FlyTrem    时间: 2014-3-16 11:25
keycola 发表于 2014-3-16 10:23
这是你的代码:
#include
int main()

嗯  谢谢 明白问题在哪了
作者: FlyTrem    时间: 2014-3-16 11:27
董月峰 发表于 2014-3-16 10:33
如果一个数恰好等于它的因子之和,则称该数为“完全数”。就是楼主所说的完数。
也就是说完数是一种特殊的 ...

嗯嗯。感谢给出答复!
作者: 脸皮猴    时间: 2014-3-16 11:49
#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;
}


作者: FlyTrem    时间: 2014-3-16 13:25
脸皮猴 发表于 2014-3-16 11:49
#includeint main(){    int sum = 0, i, j;    //历遍1到998所有的的整数    for ( i = 1 ; i < 999 ; i++ ...

Thank you!!谢谢!!!!!




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