#include <iostream>
#include <cmath>
using namespace std;
class NuturalNumber //类的声明
{
private:
int n;
public:
void setValue(int x); // 置数据成员n的值,判断是否是正整数
int getValue(); // 返回私有数据成员n的值
bool isPrime(); // 判断数据成员n是否为素数,是返回true,否则返回false
void printFactor(); // 输出数据成员n的所有因子,包括1和他本身
bool isPerfect(); // 判断n数否为完全数
bool isReverse(int x); // 判断形式参数x是否为n的逆向数
bool isDaffodil(int x); // 判断x是否为水仙花数
void printDaffodils(); // 显示所有大于1,且小于n的水仙花数
};
void main()
{
NuturalNumber nn; //定义类的一个实例(对象)
nn.setValue(6);
cout<<nn.getValue()<<(nn.isPrime()?"是":"不是")<<"素数"<<endl;
nn.setValue (37);
cout<<nn.getValue()<<(nn.isPrime()?"是":"不是")<<"素数" <<endl;
nn.setValue (84);
cout<<nn.getValue()<<"的因子有:";
nn.printFactor();
cout<<endl;
nn.setValue(6);
cout<<nn.getValue()<<(nn.isPerfect()?"是":"不是")<<"完全数" <<endl;
nn.setValue(123);
cout<<nn.getValue()<<(nn.isReverse(321)?"是":"不是")<<"逆向数" <<endl;
cout<<"153"<<(nn.isDaffodil(153)?"是":"不是")<<"水仙花数" <<endl;
nn.setValue(1000);
nn.getValue();
nn.printDaffodils();
}
void NuturalNumber::setValue(int x)
{
if(x>0 && x%1==0)
{
n=x;
}
}
int NuturalNumber::getValue()
{
return n;
}
bool NuturalNumber::isPrime()
{
int i;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
return false;
}
return true;
}
void NuturalNumber::printFactor()
{
int i;
for (i=1;i<=n;i++)
{
if(n%i==0)
cout<<i<<" ";
}
}
bool NuturalNumber::isPerfect()
{
int i,s=0;
for(i=1;i<n;i++)
{
if(n%i==0)
s=s+i;
}
if(s==n)
return true;
else
return false;
}
bool NuturalNumber::isReverse(int x)
{
int a,s=0;
while (x>0)
{
a=x%10;
s=s*10+a;
x=x/10;
}
if(s==n)
return true;
else
return false;
}
bool NuturalNumber::isDaffodil(int x)
{
n=x;
int a,s=0;
while (x>0)
{
a=x%10;
s=s+a*a*a;
x=x/10;
}
if(s==n)
return true;
else
return false;
}
void NuturalNumber::printDaffodils()
{
for(int i=2;i<n;i++)
{
if(isDaffodil(i))
cout<<i<<" ";
}
cout<<endl;
return;
}
运行结果: