一道openjudge的题目问下,

列出完数的一个题目问下
查看 提交 统计 提问
总时间限制: 1000ms 内存限制: 1024kB
描述
自然数中,完数寥若晨星,请在从1 到某个整数范围中打印出所有的完数来。所谓“完数”是指一个数恰好等于它的所有不同因子之和。例如,6 是完数,因为6=1+2+3。而24不是完数,因为24≠ +2+3+4+6+8+12(=36)。

输入
输入数据中含有一些整数n(1
输出
对于每个整数n,输出所有不大于n 的完数。每个整数n 的输出由n 引导,跟上冒号,然后是由空格开道的一个个完数,每个n 的完数列表应占独立的一行。
样例输入
100
5000
0
样例输出
100: 6 28
5000: 6 28 496
————————————————————————————————
我写的代码一直没办法accept
————————————————————————————
#include “stdio.h”
#include "math.h"
int main()
{
long long int sum=1;
int i,j,k;
char ch;
int count=0;
long long int b[100];
for(i=1;i<=12;i++)
{
sum*=i;
}
while(scanf("%ld",&b[i])==1)
{
if((ch=getchar())==EOF)
{
break;
}
i++;
}
for(j=0;j<i;j++)
for(k=j+1;k<i;k++)
{
if(b[k]*b[j]==sum)
{
count++;
}

}
printf("%d",count);
return 0;
}——————————————————————
不知道怎么改好。。。
题目网址。。
——————————————
http://jmu.openjudge.cn/stl/T2/
——————————————————————

 #include <cstdlib>
#include <iostream>
#include <vector>
#include <cstdio>

using namespace std;

const int MAX = 10000;

int main(int argc, char *argv[])
{
    vector<int> vec;

    for(int i=2; i<MAX; i++)
    {    
        int sum = 0;

        for(int j=1; j<=i/2; j++)
        {
            if(i % j ==0)
                sum += j;
        }

        if(sum == i)
            vec.push_back(i);                   
    }

    int n;   
    while(cin >> n)
    {      
        cout << n <<":";
        int count = vec.size();

        for(int i=0; i<count; i++)
        {
            if(vec[i] <= n)
                cout << " " << vec[i];
            else
                break;
        }

        cout << endl;
    }

    return EXIT_SUCCESS;
}

http://zhidao.baidu.com/link?url=n_Hsh1ZbEHwjcjUrjGRPZkfcz-6I00yqFQSDXLzsp8x7is6X3Z7a44JYD5s79DStnQBYt9paMhLzFJE7Z49Fka