蓝桥杯:试题3971
问题描述
有一些正整数,如果这个正整数分解质因数之后,只包含2或3或5,那么该数即为“丑数”,比如100就是“丑数”,100分解质因数之后只包含2和5;14就不是“丑数”,因为14分解质因数之后,包含了7.
输入正整数n,请写程序判断n是否是“丑数”,是“丑数”则输出“yes”,否则输出“no”。
输入格式
一个正整数n
输出格式
一个字符串yes 或no
样例输入
15
样例输出
yes
样例输入
242
样例输出
no
数据规模和约定
n不超过C语言整型范围
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int x=0;
StringBuffer stringBuffer=new StringBuffer();//存储分解因数
for (int i=2;i<=n;i++){//短除法思路
if (n%i==0){
stringBuffer.append(i);
stringBuffer.append(",");
n=n/i;
i--;
}
}
String []str=stringBuffer.toString().split(",");//切割成数组
for (int i=0;i<str.length;){
//1.分解因数没有,提前判断它不是丑数
//2.防止没有分解因数造成空字符串导致下面的Integer.valueOf(str[i])错误
if ("".equals(str[i])){
System.out.println("no");
break;
}
//可不转int类型,用equals(str[i])比较
x=Integer.valueOf(str[i]);//字符串变成int类型
if (x==2||x==3||x==5){
i++;//把for的i++放此处,用于计数,
if (i==str.length){//没有多余的因素分解和因数数组长度相等输出
System.out.println("yes");
break;
}
}else{//不只包含2或3或5的直接输出no
System.out.println("no");
break;
}
}
}
}