描述
输入一个正整数n,输出一个最小正整数m,使得m的各位乘积等于n,若不存在,则返回-1。
Example 1:
Input: 100
Output: 455
Example 2:
Input: 36
Output: 49
思路
1、当输入的数据n<10时,可以直接返回10+n;
2、当输入的数据>10时,需要分析求小于10的所有因子,而且要满足因子的个数越少越好,并且小的因子应该放在前面。当用10以内的所有因子试过之后,如果这些因子乘积不等于输入数据n,说明不存在最小正整数m,应该返回-1。
代码:
public class Solution{
public static void main(String[] args) {
int m =fun(getString());
System.out.println(m);
}
//输入函数
public static Integer getString(){
return Integer.parseInt((new Scanner(System.in)).nextLine());
}
//处理函数
public static int fun(int n){
int temp = n;String k ="";
if(temp <= 9){
return 10 + temp;
}
//由大到小试因子
for(int i = 9;i >= 2;){
//当前数字为因子时多次进行除操作,否则换下一个因子
if(temp%i == 0){
k = k + i;
temp = temp/i;
continue;
}else
i--;
}
//对结果进行验证
int n2 = 1;
for(int j = 0; j<k.length(); j++){
n2 = n2*Integer.parseInt(k.charAt(j)+"");
}
//结果不符合时
if(n2 != n){
return -1;
}
//按从小到大的顺序排列因子
String out = new String();
for(int i = k.length()-1; i >= 0; i--){
out = out + k.charAt(i);
}
return Integer.parseInt(out);
}
}