(一)问题及代码:
/*
* 文件名称:Ex1-r.cpp
* 作 者:刘杰
* 完成日期:2017 年 4月 24 日
* 版 本 号:visual C++6.0
* 对任务及求解方法的描述部分:
* 输入描述:无
* 问题描述:正整数类
* 程序输出:“”
* 问题分析:略
* 算法设计:略
*/
#include<iostream>
using namespace std;
class NaturalNumber
{private:
int n;
public:
void setValue (int x);
int getValue();
bool isPrime();
void printFactor();
bool isPerfect();
bool isReverse(int x);
bool isDaffodil(int x);
void printDaffodils();
};
void main(void)
{
NaturalNumber nn;
nn.setValue (12);
cout<<nn.getValue()<<(nn.isPrime()?"是":"不是")<<"素数" <<endl;
nn.setValue (45);
cout<<nn.getValue()<<(nn.isPrime()?"是":"不是")<<"素数" <<endl;
nn.setValue (345);
cout<<nn.getValue()<<"的因子有:";
nn.printFactor();
cout << endl;
nn.setValue(45);
cout << nn.getValue() << (nn.isPerfect()?"是":"不是") << "完全数" << endl;
nn.setValue(5);
cout << nn.getValue() << (nn.isPerfect()?"是":"不是") << "完全数" << endl;
nn.setValue(564);
cout << "456" << (nn.isReverse(321)?"是":"不是") << nn.getValue() << "的逆向数" << endl;
nn.setValue(654);
cout << "456" << (nn.isReverse(456)?"是":"不是") << nn.getValue() << "的逆向数" << endl;
nn.setValue(153);
cout << nn.getValue() << (nn.isDaffodil(153)?"是":"不是") << "水仙花数" << endl;
nn.setValue(65);
cout << nn.getValue() << (nn.isDaffodil(30)?"是":"不是") << "水仙花数" << endl;
nn.setValue(200);
cout << nn.getValue() <<" 以内的水仙花数有:";
nn.printDaffodils();
system("PAUSE");
}
void NaturalNumber::setValue(int x)
{
if(x > 0)
{
n = x;
}
return ;
}
int NaturalNumber::getValue()
{
return n;
}
bool NaturalNumber::isPrime()
{
bool prime = true;
int i = 2 ;
while(i < n)
{
if(n % i == 0)
{
prime = false;
break;
}
++i;
}
return prime;
}
void NaturalNumber::printFactor()
{
int i;
for(i = 1; i <= n; ++i)
{
if(n % i == 0)
{
cout << i << '\t' ;
}
}
return;
}
bool NaturalNumber::isPerfect()
{
bool perfect = false;
int i,s = 0;
for(i = 1;i < n; ++i)
{
if(n % i == 0)
{
s = s + i;
}
}
if(s == n)
{
perfect = true;
}
return perfect;
}
bool NaturalNumber::isReverse(int x)
{
bool reverse = false;
int s = 0;
while(x > 0)
{
s = s * 10 + x % 10;
x = x / 10;
}
if(s == n)
{
reverse = true;
}
return reverse;
}
bool NaturalNumber::isDaffodil(int x)
{
bool daffodil = false;
int s = 0, d, p = x;
while(x > 0)
{
d = x % 10;
s = s + d * d * d;
x = x / 10;
}
if(p == s)
{
daffodil = true;
}
return daffodil;
}
void NaturalNumber::printDaffodils()
{
int i;
for(i = 2; i < n; ++i)
{
if(isDaffodil(i))
{
cout << i << " " ;
}
}
cout << endl;
return ;
}
(二)运行结果:
(三)心得体会:
类和对象还有较多不明白的地方,仍需努力学习。
(四)知识点总结:
要注意公共成员与私有成员的区别。