描述
輸入一個正整數n,輸出一個最小正整數m,使得m的各位乘積等於n,若不存在,則返回-1。
Example 1:
Input: 100
Output: 455複製程式碼
Example 2:
Input: 36
Output: 49複製程式碼
思路
- 當輸入的資料n<10時,可以直接返回10+n;
- 當輸入的資料>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);
}
}
複製程式碼
最小整數m的構造具有迷惑性,要注意最少的因子和有小到大的排列順序。
機試時未能答出,無思路。