第四周实验报告(三)

* 程序的版权和版本声明部分
* 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;  
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值