请使用“答题”菜单或使用VC6打开考生文件夹proj3下的工程proj3,其中声明了MagicNumber类,该类是一个用于表示连续正整数序列的类。MagicNumber的成员函数Nar-cissistic的功能是查找该序列中的水仙花数水仙花数是指一个n位

admin2016-08-19  37

问题 请使用“答题”菜单或使用VC6打开考生文件夹proj3下的工程proj3,其中声明了MagicNumber类,该类是一个用于表示连续正整数序列的类。MagicNumber的成员函数Nar-cissistic的功能是查找该序列中的水仙花数水仙花数是指一个n位数(n>=3),其每个位上的数字的13次方之和等于该数本身,例如153就是一个3位的水仙花数(153=1*1*1+5*5*5+3*3*3))。请编写成员函数Narcissistic。在main函数中给出了一组测试数据,若输入3,此时程序的输出应该是:3位的水仙花数共4个:
    153
    370
    371
    407
    注意:只需在//**********333**********和//**********666**********之间填人所编写的若干语句,不要改动程序中的其他内容。
1   #include"MagicNumber.h"
2   void MagicNumber::Narcissistic()
3   {
4  int i,number,sum,figures[30];
5  for(number=min;number6    {
7    int x=number;i=0;
8    while(x!=0){figures=x%10;i++;x/=i0;)
9    //********333********
10
11
12    //********666********
13    }
14  }
15  int main()
16  {
17    int d;
18    cout<<"请输入位数:";
19    cin>>d;
20    MagicNumber obj(d);
21    obj.Narcissistic();
22    obj.Print(string("水仙花数"));
23    writeToFile("c:\\test\\");
24    return 0;
25   }
1   //proj3\MagicNumber.h
2   #include
3   #include
4  #include
4  using namespace std;
5    class MagicNumber
6    {
7   public:
8    MagicNumber(int d):digits(d),min(pow(10,digits-1)),max(pow(10,digits)-1),count(0){)
9    MagicNumber(int x1,int x2):min (x1),max(x2){}
10    void ResetCount(){count=0;}
11    int GetCount()const{returncount;}
12    int GetSet(int index)(returnset[index];}
13    void Narcissistic();  //查找水仙花数
13    void Print(string&str)
14    {
15    cout<16    for(int i=0;i17    cout<18    }
19  private:
20    int digits;  //Magic数的位数
2l    int min,max;  //待计算的数值范围
22    int count;  //Magic数的数量
23    int set[20];  //Magic数集合
24  };
25  void writeToFile(const char*);

选项

答案1 sum=0; 2 for(i=i-1;i>=0;i--) 3 { 4 sum+=pow(figures[i],digits); 5 } 6 if(sum==number) 7 { 8 set[count++]=number; 9 }

解析 MagicNumber类中的成员变量digits代表连续数列的位数,构造函数首先使用参数来初始化digits,然后根据digits初始化min和max,其中min代表digits位数的最小值,max代表digits位数的最大值,count用来统计min~max范围内的水仙花数的个数,set数组用来存储min~max范围内的水仙花数。程序首先在main函数根据用户输入的数字d来构造一个MagicNumber。对象,构造函数完成digits、min、max的初始化,然后调用MagicNumber’对象的成员函数Narcissistic()来统计所有digits位数的水仙花数信息。for循环通过遍历min~max范围内的所有数,在遍历过程中,while循环将当前遍历到的数x的各个数位上的数字统计到figures数组的前digits个元素中,接下来需要做的事情就是判断x是否是水仙花数,即将figures数组的前digits个元素分别求digits次方(位数次方)再相加,累加的和存储到sum中,最后判断sum是否与当前数x(number)相等,若相等,则x属于水仙花数,这时需要把x存储到下标为count的set数组中,同时count变量自增1(水仙花数个数加1),否则的话继续下一次for循环,直到当前数x达到最大值max为止。统计完水仙花数后,再调用对象的Print函数,输人水仙花数信息。
转载请注明原文地址:https://jikaoti.com/ti/oRE0FFFM
0

最新回复(0)