一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1 2 3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子:“
问题 无输出
#include<iostream>
using namespace std;
int main()
{
int N;
int sum=0;
cin>>N;
for(int a=1;a<=N;a++)
{
for(int b=1;b<=a/2;b++)
{
if(a%b==0)
sum+=b;
if(sum==a)
{
cout<<a<<" its factors are ";
for(b=1;b<=a/2;b++)
{
if(a%b==0)
cout<<b<<" ";
}
cout<<endl;
}
}
}
return 0;
}
###### 运行结果及报错内容
无输出
#include<stdio.h>
int main(){
int n,i,fator,sum;//n表示题目中N以内的数,判断i是不是完数,fator是因子,sum是因子fator的和
scanf("%d",&n);//输入N,查找N以内的所有完数
for(i=2;i<=n;i++){
sum=1;//1是所有数的因子,所以sum初始值为1
for(fator=2;fator<=i/2;fator++){//找到数i的所有因子fator并求和得到sum
if(i%fator == 0)
sum+=fator;
}
if(sum == i){//如果sum和i相等,说明i是完数
printf("%d its fastors are 1",i );
for(fator=2;fator<=i/2;fator++){//循环输出所有因子
if(i%fator == 0)
printf(" %d",fator);//满足题目中【最后一个数字后面没有多余的空格】
}
printf("\n");
}
}
return 0;
}
每执行一次外循环,sum需要重置为0
#include<iostream>
using namespace std;
int main()
{
int N;
int sum=0;
cin>>N;
for(int a=1;a<=N;a++)
{
sum=0;//重置为0
for(int b=1;b<=a/2;b++)
{
if(a%b==0)
sum+=b;
if(sum==a)
{
cout<<a<<" its factors are ";
for(b=1;b<=a/2;b++)
{
if(a%b==0)
cout<<b<<" ";
}
cout<<endl;
}
}
}
return 0;
}