今天是培训第五天,培训天数已经过半,基本学会了使用简单的程序,但是还没法讲所学知识融会贯通,一起使用。今天一下午都在做一道题,一开始有误,题目如下:
求x到y中所有完数。
不包括本身因子之和等于它本身的数成为完数。
输入:两个整数x,y;
输出:每行一个整数,从小到大,在【x,y】范围内所有完数。
一开始编的程序如下:
#include<iostream>
#include<iomanip>
#include<cmath>
#include<cstdio>
using namespace std;
int main()
{
int x,y,i;
cin>>x>>y;
for(i=x;i<=y;i++)
{
for(int j=1;j<=sqrt(i*1.0);j++)
{if(i%j==0)
sum==sum+j;}
if(sum==i)
cout<<sum<<endl;
}
return 0;
}
没有考虑到sum的初值设置,因为他是需要一直符合条件的值然后一直相加的,但由于没有初值故无法得到输出的正确值。
第二个是没有考虑它本身这个数,没有把它减去在相等。
正确编程如下:
#include<iostream>
#include<iomanip>
#include<cmath>
#include<cstdio>
using namespace std;
int main()
{
int x,y,i,j;
cin>>x>>y;
double sum=0;
for(i=x;i<=y;i++)
{
sum=0;
for(int j=1;j<=sqrt(i*1.0);j++)
{if(i%j==0)
sum==sum+j;
if(i%j==0&&j!=i/j)
sum==sum+i/j;}
sum=sum-i;
if(sum==i)
cout<<sum<<endl;
}
return 0;
}