丑数的定义:丑数是指那些因子只含2,3,5的数,为方便起见,1也视为丑数
故1,2,3,4,5,6,8,9,10,12,15是最前面的丑数,请编写一个程序,输出第N(N<=300)个丑数。(N为输入值)
如果输入非法值,请返回 -1
一些转化的例子:
输入整数N = 5
输出的丑数是5
思路:此题的关键是判决丑数,即给定一个数怎么判断是否满足因子只含2,3,5。我们这样来做,比如给的数是num,如果num%2 == 0,则num/=2,一直循环,如果num == 1则num的因子只有2,同理对3,5做同样的事情。
程序
#include <stdlib.h>
/* 功能:输入一个整数n,输出第n个丑数的值
* 输入:输入的整数
* 输出:无
* 返回:输出第N个丑数,如果N小于等于0返回-1
*/
bool UglyNumber(int num)
{
while(num%2==0)
{
num/=2;
}
while(num%3==0)
{
num/=3;
}
while(num%5==0)
{
num/=5;
}
return num==1;
}
int FindUglyNumber(int N)
{
if(N <= 0 || N >300)
return -1;
int cnt = 0;
int num = 1;
while(num)
{
if(UglyNumber(num))
{
cnt++;
}
if(cnt == N)
{
return num;
}
num++;
}
return 0;
}