为何两段代码只因s=0位置的不同就导致一个有输出结果,一个没有。s=0定义在int中时没有结果,定义在第一个for循环中时有结果。
#include<iostream>
using namespace std;
int main()
{
int a,s,i,j;
cout<<"please enter the number:"<<endl;
for(i=1;i<1000;i++)
{
s=0;
for(j=1;j<i;j++)
if(i%j==0)
{
s=s+j;
}
if(s==i)
{
cout<<s<<"是完数:";
for(a=1;a<s;a++)
{
if(s%a==0)
cout<<a<<" ";
}cout<<endl;
}
}
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a,s=0,i,j;
cout<<"please enter the number:"<<endl;
for(i=1;i<1000;i++)
{
for(j=1;j<i;j++)
if(i%j==0)
{
s=s+j;
}
if(s==i)
{
cout<<s<<"是完数:";
for(a=1;a<s;a++)
{
if(s%a==0)
cout<<a<<" ";
}cout<<endl;
}
}
return 0;
}
在循环中需要对s值进行复位,所以s=0在循环中一定要有
因为每一个循环都是对循环值i进行完数判断,s是i的所有因子之和,因此它是对每个i都要计算出s的值。如果s不复位为0,那么它将是所有i值的因子之和,所以就不对了
============
如果s=0只在循环外面,那么它只是对第一个i值是否完数判断进行了复位,后面的i值就没有复位了
这跟在哪定义没有关系
你如果在循环中不给s清零,它会一直变大的呀
它本来是用来算一个数各个位数之和的
如果执行s+=j之前s不清零,那它就不是一个数的各个位数之和,而是所有数的各个位数之和