bool IsUglyNum(int num)
{
while (num % 2 == 0)
num /= 2;
while (num % 3 == 0)
num /= 3;
while (num % 5 == 0)
num /= 5;
return (num == 1) ? true : false;
}
int GetUglyNum(int index)
{
if (index <= 0)
return 0;
int num = 0;
int ugly = 0;
while (ugly < index)
{
num++;
if (IsUglyNum(num))
{
ugly++;
}
}
return num;
}
int Min(int num1, int num2, int num3)
{
int min = (num1 < num2) ? num1 : num2;
min = (min < num3) ? min : num3;
return min;
}
int GetUglyNum_Solution2(int index)
{
if (index <= 0)
return 0;
int *UglyNum = new int[index];
UglyNum[0] = 1;
int NextUglyIndex = 1;
int *Multiply2 = UglyNum;
int *Multiply3 = UglyNum;
int *Multiply5 = UglyNum;
while (NextUglyIndex < index)
{
int min = Min(*Multiply2 * 2, *Multiply3 * 3, *Multiply5 * 5);
UglyNum[NextUglyIndex] = min;
while (*Multiply2 * 2 <= UglyNum[NextUglyIndex])
++Multiply2;
while (*Multiply3 * 3 <= UglyNum[NextUglyIndex])
++Multiply3;
while (*Multiply5 * 5 <= UglyNum[NextUglyIndex])
++Multiply5;
++NextUglyIndex;
}
int ugly = UglyNum[NextUglyIndex - 1];
delete[] UglyNum;
return ugly;
}
05-25