这段找完数的程序有什么问题吗?

 

因子相加 循环的上限值搞错了,修改如下,供参考:

#include<iostream>
#include<iomanip>

using namespace std;

int main()
{
     int a[100];
     int n,i,k,s;
     for(n=1;n<=1000;n++) {
         for(i=1,k=0;i<=n-1;i++)
             if(n%i==0) a[k++]=i;
         for(i=0,s=0;i<k;i++)s+=a[i];
         if(s==n){
            cout<<(std::left)<<setw(3)<<n<<"是完数,因子为:";
            for(i=0;i<k;i++) cout<<setw(5)<<a[i];
            cout<<endl;
         }
     }
     system("pause");
     return 0;
}

 

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
    /*
    	完数:所有的因子相加等于这个数本身
    	6=1+2+3
    */
    int i,j,a,b,c;
    printf("1000以内的完数如下:\n");
    for(i=6;i<=1000;i++)
    {
   		a=0;
   		//求i对应的所有的因子
    	for(j=2;j<=i;j++)
    	{
    		if(i%j==0)
    		{
    			
    			a+=i/j;
    		}
    	}
    	if(i==a){
    		//该循环语句的作用就是打印结果
    		for(j=2;j<=i;j++)
	    	{
	    		if(i%j==0)
	    		{
	    			if(i==j){
	    				printf("%d",i/j);	
	    			}else{
	    				printf("%d+",i/j);
	    			}
	    		}
	    	}
    		printf("=%d\n",i);
    	}
    }
}