C++代码求1000以内的完数

#include<iostream>
using namespace std;

//编译没有问题,但是跑不出来

int main() {
    int i,j,k=1,total;
    for (i = 2; i < 1000; i++) {
        total = 0;
        for (j = 1; j <= (int)sqrt(i); j++) {
            if ((i % j) == 0)total = total + j;
            if (total == i) {
                cout << i;
                cout << "它的因数为" << endl;
                for (k = 1; k <= (int)sqrt(i); k++)
                    if (i % k == 0) cout << k << ' ';
                cout << endl;
            }
        }
        
    }
    return 0;
}

这样???

#include<iostream>
using namespace std;

//编译没有问题,但是跑不出来

int main() {
	int i, j, k = 1, total;

	for (i = 2; i < 1000; i++) {

		total = 0;
		for (j = 1; j <= /*(int)sqrt(i)*/i; j++) {

			if ((i % j) == 0) total = total + j;

			if (total == i) {
				cout << i;
				cout << "它的因数为" << endl;

				for (k = 1; k <= /*(int)sqrt(i)*/i; k++)
					if (i % k == 0) cout << k << ' ';

				cout << endl;
			}
		}

	}
	return 0;
}

 

请问完数的定义是什么? 你的程序没有任何输出?请打印出 total 和 i 的值, 看看他们是怎么变化的。

错误有两个:①前两个for语句里面的i的条件设置错误,应该是<i,而不是<i的平方根;
②输出因数的时候,不能将判断因数之和是否等于i的if语句放在找完数的for语句中