写了个程序,按照我在二楼的思路,实现了功能,效率方面没考虑过,自行优化吧。
像:最小公倍数、排序算法上改进,类接口上改进(加操作符重载、友元函数)
[CODE]#include <iostream>
using namespace std;
int sbs(int a, int b) // 最小公倍数
{
for (int i=max(a,b); ; ++i)
if (i%a==0 && i%b==0)
return i;
}
class Number
{
public:
Number(){}
void setvalue(int value)
{
for (int i=0; i<=9; ++i)
_val[i] = 0; // 先将 _val[10] 每位清0
int k = 10;
_value = value;
_n = 1;
while (value/k != 0)
{
++_n; // 求得 _value 的位数 _n
k *= 10;
}
k /= 10;
for (int i=0; i<= _n-1; ++i)
{
_val[i] = (value / k) % 10; // _value 的每位数"从左到右"存储在数组_val[10]里
k /= 10;
}
}
int getvalue()
{
return _value;
}
int getn()
{
return _n;
}
int getval(int n)
{
return _val[n]; // 得到第n位的数
}
private:
int _value;
int _n; // _value 的位数
int _val[10]; // 各位数字存在数组里
};
bool isGreater(Number &a, Number &b)
{
for (int i=0; i<=sbs(a.getn(),b.getn())-1; ++i) // 最大比较次数为a、b位数的最小公倍数
{
if (a.getval(i%a.getn()) > b.getval(i%b.getn())) // 循环比较
return true;
else if(a.getval(i%a.getn()) < b.getval(i%b.getn()))
return false;
}
return false;
}
int main()
{
int n;
cout << "input numers: " << endl;
cin >> n;
getchar();
int a;
Number b[n];
for (int i=0; i<=n-1; ++i)
{
cin >> a;
b[i].setvalue(a);
}
cout << endl;
for (int i=n-1; i>=1; --i) // 排序
for (int j=1; j<=i; ++j)
{
if (isGreater(b[j], b[j-1]))
{
int temp = b[j].getvalue();
b[j].setvalue(b[j-1].getvalue());
b[j-1].setvalue(temp);
}
}
for (int i=0; i<=n-1; ++i)
{
cout << b[i].getvalue();
}
cout << endl;
return 0;
}
[/CODE]
[此贴子已经被作者于2007-10-13 10:55:07编辑过]