对一个任意整数,求其降续数

来源:百度知道 编辑:UC知道 时间:2024/05/27 17:50:29
对一个几位数的任意整数,求出其降序数。例如,整数是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,然后完成对该类的测试。
.........随便了,急着用,麻烦大虾们!~用C也行

C++实现:
#include<iostream>
using namespace std;

class NUM {
public:
NUM(int x = 0) :n(x), m(0), a(0) {}
~NUM() {if (a) delete []a; }
void decrease();
void show(ostream &out) { // 这里改了下,没必要输入到文件中
out << "n = " << n << endl;
for (int i=0; a[i]!=-1; ++i) {
cout << a[i] << " ";
}
cout << endl << "m = " << m << endl;
}

private:
int n, m;
int *a;
};

void NUM::decrease() {
int i = 0;
int _n = n;
while (_n > 0) {
++i;_n/=10;
}
a = new int[i+1];
a[i] = -1;
// if (!a) ??
_n = n;
i = 0;
while (_n > 0