C++试题,紧急求助

来源:百度知道 编辑:UC知道 时间:2024/05/16 13:26:04
对一个几位数的任意整数,求出其降序数。例如,整数是82319,则其降序数是98321。算法提示:首先确定整数的位数,创建一个可以存放该数每位的一维数组。将整数的各位数分解到一维整型数组a中,再将a数组中的元素按降序排序,最后将a数组元素值转换为一个整数输出。试建立一个类NUM,用于完成该功能。具体要求如下:
(1)私有数据成员。
●int n、m:分别存放几位数的原整数和结果整数。
●int *a:动态申请数列数组的空间,该指针指向它,该数组存放整数各位原值及其元素的降序排列值。
(2)公有成员函数。
●NUM(int x=0):构造函数,用参数x初始化数据成员n,置m为0。
●void decrease():将n的各位数值分解到a数组中,并将a数组排成降序后,转换为整数m。
●void show(fstream &):输出原数n、数组a及其降序数m。
●~NUM():析构函数,释放动态申请的数据空间。
(3) 在主程序中完成对该类进行测试。在主程序中从数据文件中输入一个5位数的任意整数,然后定义一个NUM类对象num,用上述输入的数初始化num,然后完成对该类的测试。
怎么做最好有详细的程序
谢谢了

#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;

class NUM
{
public:
NUM(int x = 0) : n(x), m(0), s(0) {}
~NUM() { delete[] a; }
void decrease();
void sort();
void show(fstream &fs);
private:
int n, m, s;
int *a;
};

void NUM::sort()
{
int i, j, k, t;

for (i = 0; i < s-1; ++i)
{
k = i;

for (j = i + 1; j < s; ++j)
{
if (a[k] < a[j])
{
k = j;
}
}

if (k != i)
{
t = a[i];
a[i] = a[k];
a[k] = t;
}
}
}

void NUM::decrease()
{
int t, i;

t = n;

while (t)
{
++s;
t /= 10;
}

a = new int[s];

t = n;
i = 0;

while (t)
{
a[i++] = t % 10;
t /= 10;