面試程式碼題(vivo)數位之積

NewCoder1024發表於2020-03-10

描述

輸入一個正整數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);
    }
}
複製程式碼

最小整數m的構造具有迷惑性,要注意最少的因子和有小到大的排列順序。

機試時未能答出,無思路。

相關文章