Ugly Numbers
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 20000/10000K (Java/Other)
Total Submission(s) : 16 Accepted Submission(s) : 4
Problem Description
Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence
1, 2, 3, 4, 5, 6, 8, 9, 10, 12, ...
shows the first 10 ugly numbers. By convention, 1 is included.
Given the integer n,write a program to find and print the n'th ugly number.
1, 2, 3, 4, 5, 6, 8, 9, 10, 12, ...
shows the first 10 ugly numbers. By convention, 1 is included.
Given the integer n,write a program to find and print the n'th ugly number.
Input
Each line of the input contains a postisive integer n (n <= 1500).Input is terminated by a line with n=0.
Output
For each line, output the n’th ugly number .:Don’t deal with the line with n=0.
Sample Input
1 2 9 0
Sample Output
1 2 10
#include <stdio.h>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
int n;
int i2_pos = 1;
int i3_pos = 1;
int i5_pos = 1;
long ugly[1501];
ugly[1] = 1;
for (int i = 2; i <= 1500; i++)
{
ugly[i] = min(ugly[i2_pos] * 2, min(ugly[i3_pos] * 3, ugly[i5_pos] * 5));
if (ugly[i] == ugly[i2_pos] * 2)
{
i2_pos++;
}
if (ugly[i] == ugly[i3_pos] * 3)
{
i3_pos++;
}
if (ugly[i] == ugly[i5_pos] * 5)
{
i5_pos++;
}
}
while (scanf("%d", &n) != EOF && n)
{
printf("%ld\n", ugly[n]);
}
return 0;
}