将给定个数的丑数由小到大输出
丑数(因子只包含2,3,5的数),1作为第一个丑数
思路:丑数应该是另一个丑数除以2,3,5的结果(1除外)
#include <iostream>
using namespace std;
class Test{
private:
long long* pNumbers;
int total;
int MIN(long long number1,long long number2,long long number3)
{
long long min = (number1<number2)? number1:number2;
min=(min<number3)?min:number3;
return min;
}
public:
Test(int index):total(index)
{
pNumbers = new long long[index];
pNumbers[0]=1;
int nextNumber=1;
long long* pMultiply2 = pNumbers;
long long* pMultiply3 = pNumbers;
long long* pMultiply5 = pNumbers;
while(nextNumber < index)
{
long long min = MIN(*pMultiply2*2,*pMultiply3*3,*pMultiply5*5);
pNumbers[nextNumber]=min;
while(*pMultiply2*2<=pNumbers[nextNumber])
++pMultiply2;
while(*pMultiply3*3<=pNumbers[nextNumber])
++pMultiply3;
while(*pMultiply5*5<=pNumbers[nextNumber])
++pMultiply5;
++nextNumber;
}
}
~Test(){
delete[] pNumbers;
}
void show()
{
for(int i=0;i<total;i++)
cout<<pNumbers[i]<<" ";
cout<<endl;
}
};
int main()
{
Test t(1500);
t.show();
}
运行结果: