题目:丑数 就是只包含质因数 2、3 和 5 的正整数。给你一个整数 n ,请你判断 n 是否为 丑 数 。
如果是,返回 true ;否则,返回 false 。
示例 1: 输入:n = 6
输 出:true
解释:6 = 2 × 3
示例 2: 输入:n = 1
输出:true
解释:1 没有质因数,因此它的全部质因数是 {2, 3, 5} 的空集。 习惯上将其视作第一个丑数。
#include <stdio.h>
//定义一个函数,用做判断一个数是否为丑数
int uglyCount(int num) {
if (num == 1) {
return 1;
}
/*判断条件:
eg:一个数除以二,一直除除到最后,若为丑数,则值为一;
若不是说明还有其他的其他的因子*/
if (num % 2 == 0 || num % 3 == 0 || num % 5 == 0) {
if (num % 2 == 0) {
num = num / 2;
}
else if (num % 3 == 0) {
num = num / 3;
}
else if (num % 5 == 0) {
num = num / 5;
}
}
else {
return 0;
}
}
int main() {
int num;
printf("请输入一个正整数:");
scanf("%d", &num);
//调用函数判断是否为丑数
int result = uglyCount(num);
//打印结果
if (result) {
printf("ture!");
}
else {
printf("flase!");
}
return 0;
}
求一个数是丑数的进阶方法(递归思想)
#include <stdio.h>
int isUgly(int num) {
int arr[] = { 2,3,5 };
int length = 3;
//递归终止条件
if (num == 1) {
return 1;
}
//递归操作
for (int i = 0; i < length; i++) {
if (num % arr[i] == 0) {
return isUgly(num / 2);
}
}
return 0;
}
int main() {
int num;
printf("请输入一个正整数:");
scanf("%d", &num);
if (num == 0) {
printf("该数不是丑数\n");
}
else {
int result = isUgly(num);
if (result) {
printf("%d是丑数\n", num);
}
else if (result == 0) {
printf("%d不是丑数\n", num);
}
}
return 0;
}