注册 登录
编程论坛 C++教室

C++的两个小案例

IT小白丶 发布于 2015-12-28 12:21, 2407 次点击
#include<iostream.h>
#include<math.h>

#define maxnum 10000
void main()
{
    int n,sum,i;
   
   
    for(n=1;n<=maxnum;n++)
    {   sum=0;
        for(i=1;i<=n/2;i++)
        {if(n%i==0)
                sum=sum+i;
        if(sum==n)
            cout<<n<<endl;
        }
    }
}
为何最后输出的结果不是6,28,496,8128
8 回复
#2
yangfrancis2015-12-28 12:40
怎么不对了?你列的那几个数都输出来了的。只是里面的for循环每次执行的时候都要在sum==n的情况下输出n值,这会有可能导致i未递增到n/2时出现sum==n的情况也会被输出。
#3
rjsp2015-12-28 12:41
先将代码排版排版

程序代码:
#include <iostream>
using namespace std;

const unsigned maxnum = 10000;

int main( void )
{
    for( unsigned n=1; n<=maxnum; ++n )
    {
        unsigned sum = 0;
        for( unsigned i=1; i<=n/2; ++i )
            if( n%i == 0 )
                sum += i;

        if( sum == n )
            cout << n << endl;
    }

    return 0;
}

#4
wp2319572015-12-28 13:26
程序代码:

#include <iostream>

using namespace std;

#define maxnum 10000

int main()
{
    for(int n=1;n<=maxnum;n++)
    {
        int sum=0;
        for(int i=1;i<=n/2;i++)    if(n%i==0) sum=sum+i;
        if(sum==n) cout<<n<<endl;
    }
    return 0;
}
#5
q02241004042015-12-28 15:35
你这个是10000以内的完数啊,输出cout不要嵌套在第二个循环里面就可以了,你应该是大意了
#6
q02241004042015-12-28 15:43
你标题不是两个小案例吗,还有一个呢
#7
阿文fire2015-12-28 22:26
程序代码:
#include <iostream> //同版主rsjp,一定要注意代码排版,易于查错,易于阅读

const int maxnum = 10000; //建议使用const

int main() //建议放弃非标准写法,main函数返回void(有些编译器通不过的),而是返回int
{
    int n,sum,i;
    for(n = 1; n <= maxnum; n++)
    {
        sum = 0;
        for(i = 1; i <= n/2; i++)
        {
            if(n%i == 0)
                sum = sum+i;
        }
        if(sum == n) //原代码就是这个放错位置了
            std::cout << n << std::endl; //不添加名字空间std的cout,会报错的
    }
    return 0;
}

#8
Marlborobccn2015-12-31 14:12
第二个那
#9
eFun2016-01-01 11:34
各位高!

[此贴子已经被作者于2016-1-1 11:37编辑过]

1