(第四周任务3)设计一个正整数类

本文介绍了一个名为NaturalNumber的类,用于处理整数的属性,如判断素数、完数、逆数、水仙花数等,并通过实例展示了其功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:      整数类                
* 作    者:      张斌
#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;    
}  


* 完成日期:      2012   年  3     月   114 日
* 版 本 号:     4-4


* 对任务及求解方法的描述部分
* 输入描述: ........
* 问题描述:........ 
* 程序输出: ........
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值