求一到一千内的完全数(一个数恰好等于它的所有因子(本身除外)的和)
写了这个程序不知那里有问题:
#include<iostream>
#include<iomanip>
using namespace std;
const int n=1000;
int main(){
int a[n];
int i,j,sum=0;
for(i=0;i<n;i++) a[i]=1+i;
for(i=1;i<n;i++)
{
for(j=1;j<a[i];j++)
{
if(a[i]%j==0){
sum+=j;
if(sum==a[i]) a[i]=a[i];
}
else a[i]=0;
}
}
int count=0;
cout<<"1~"<<n<<"之间的完全数:"<<endl;
for(i=0;i<n;i++)
if(a[i]!=0)
{
cout<<setw(6)<<a[i];
count++;
if(count%5==0) cout<<endl;
}
cout<<endl;
return 0;
}
高手帮忙看一看,指出问题来!
[解决办法]
#include<iostream>#include<iomanip>using namespace std;const int n=1000;int main(){ int a[n]; int i,j,sum=0; cout<<"1~"<<n<<"之间的完全数:"<<endl; for(i=0;i<n;i++) { a[i] = 1 + i; } for(i=0;i < n;i++) { sum = 0; for(j = 1;j <= a[i];j++) { if(a[i]%j ==0) { sum += j; if(sum == a[i]) { cout<<a[i]<<setw(6); } } } } cout<<endl; return 0;}
[解决办法]
const int n=1000; int main(){ int a[n]; int i,j,sum=0; for(i=0;i<n;i++) a[i]=1+i; for(i=1;i<n;i++) { sum = 0; for(j=1;j<a[i];j++) { if(a[i]%j==0){ sum+=j; } } if(sum!=a[i]) { // a[i]=a[i];//what do you want to do? a[i]=0; } } int count=0; cout<<"1~"<<n<<"之间的完全数:"<<endl; for(i=0;i<n;i++) if(a[i]!=0) { cout<<setw(6)<<a[i]; count++; if(count%5==0) cout<<endl; } cout<<endl; return 0; }
[解决办法]
你的else改变了数组a的值
#include < stdio.h>main(){int m,i,s;for(m=1;m<=1000;m++){s=0;for(i=1;i<m;i++)if(m%i==0)s=s+i;if(s==m)printf("%d,",s);}}