* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: 整数类
* 作 者: 晁阳
* 完成日期: 2012 年 3 月 12 日
* 版 本 号: c.3
* 对任务及求解方法的描述部分
* 输入描述: ........
* 问题描述:........
* 程序输出: ........
* 程序头部的注释结束
贺老师,为什么输出因子的时候用数组就会产生随机数??,如图:
#include<iostream>
using namespace std;
class NaturalNumber
{
private:
int n;
public:
void setValve( int x );//设置数据成员n的值,要求判断是否是整数
int getValve();//返回私有数据成员n的值
bool isPrime();//判断数据成员n是否是素数,是返回true,不是返回false
void printFactor();//);输出数据成员n的所有因子,包括1的n本身
bool isPerfect();//判断数据成员n是否为完数。
bool isReverse(int x);//判断形势参数x是否为数据成员你的逆数
bool isDaffodil( int x);//判断形式参数x是否是水仙花数
void printDaffodils();//显示所有大于1且小于数据成员n的水仙数
};
void main ( void )
{
NaturalNumber nn;
nn.setValve ( 6 );
cout << nn.getValve() << ( nn.isPrime()? "是":"不是") << "素数" << endl;
nn.setValve ( 37 );
cout << nn.getValve() << (nn.isPrime()? "是":"不是")<< "素数" << endl;
nn.setValve ( 84 );
cout << nn.getValve() << "的因子有:"<<endl;
nn.printFactor();
nn.setValve (321);
cout << nn.getValve() << (nn.isPerfect()? "是" : "不是") << "完全数" << endl << endl;
nn.setValve (28);
cout << nn.getValve() << (nn.isPerfect()? "是" : "不是") << "完全数" << endl << endl;
nn.setValve (123);
cout << "和" << nn.getValve() << (nn.isReverse(321)? "是" : "不是") << "逆向数" << endl << endl;
nn.setValve (654);
cout << "和" << nn.getValve() << (nn.isReverse(345)? "是" : "不是") << "逆向数" << endl << endl;
cout << (nn.isDaffodil(153)? "是" : "不是") << "水仙花数" << endl << endl;
cout << (nn.isDaffodil(369)? "是" : "不是") << "水仙花数" << endl << endl;
nn.setValve (1000);
nn.printDaffodils();
cout << endl;
system("PAUSE");
}
void NaturalNumber::setValve( int x )//设置数据成员n的值,要求判断是否是整数
{
if( x > 0 && ((10*x)% 10 == 0))
cout << x << "是整数" << endl;
else
cout << x << "不是整数" << endl;
n = x;
}
int NaturalNumber::getValve( )//返回私有数据成员n的值
{
return n;
}
bool NaturalNumber::isPrime()//判断数据成员n是否是素数,是返回true,不是返回false
{
int i = 1;
for (; i < n; i++)
{
if(n % i == 0)
{
return false;
break;
}
}
return true;
}
void NaturalNumber::printFactor()//);输出数据成员n的所有因子,包括1的n本身
{
int i = 1,m;
int string [500];
for ( ;i <= n; i++)
{
if( n % i == 0)
{
string [i-1] = i;
}
}
for ( m = 0; m <= i-1; m++)
{
cout <<string[m]<<" ";
}
}
bool NaturalNumber::isPerfect( )//判断数据成员n是否为完数。
{
int m = 0;
for(int i = 1; i < n; ++i)
{
if(n % i == 0)
{
m = m + i;
}
}
if(n == m)
{
return true;
}
else
{
return false;
}
}
bool NaturalNumber::isReverse(int x )//判断形势参数x是否为数据成员你的逆数
{
int a, b, s = 0;
b = x;
while(b != 0)
{
a = b % 10;
b = b / 10;
s = s * 10 + a;
}
cout << x;
if(s == n)
{
return true;
}
else
{
return false;
}
}
bool NaturalNumber::isDaffodil( int x)//判断形式参数x是否是水仙花数
{
cout << x;
int m, i, j, s;
m = x % 10;
i = x / 100;
j = (x % 100) / 10;
s = i * i * i + j * j * j + m * m * m;
if(s == x)
{
return true;
}
else
{
return false;
}
}
void NaturalNumber::printDaffodils()//显示所有大于1且小于数据成员n的水仙数
{
int m, i, j, s, h, num = 0;
if(n <= 100)
{
cout << "没有水仙花数" << endl;
exit(0);
}
for(h = 100; h < n; ++h)
{
m = h % 10;
i = h / 100;
j = (h % 100) / 10;
s = i * i * i + j * j * j + m * m * m;
if(s == h)
{
cout << h << '\t';
++num;
}
}
if(num == 0) cout << "没有水仙花数" << endl;
}