京東軟開2015筆試:尋找滿足條件的整數
阿新 • • 發佈:2017-06-10
依據 -m 取值 math -1 name bsp com integer
題目大意:
給出整數N(0 ≤ N ≤ 10^9),找出一個最小的整數Q,使得將Q的每一位相乘之後等於N
比如N=18,則Q可能取值為:29(2×9=18),36(3×6=18),63(6×3=18),92(9×2=18)
那麽我們僅僅要取最小值29即為結果 輸入:整數N(0 ≤ N ≤ 10^9) 輸出:假設存在這種Q,則輸出Q。假設不存在,輸出-1
package com.liuhao.acm.exam; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * @author liuhao 給出整數N(0 ≤ N ≤ 10^9),找出一個最小的整數Q,使得將Q的每一位相乘之後等於N * 比如N=18,則Q可能取值為:29(2×9=18),36(3×6=18),63(6×3=18),92(9×2=18) * 那麽我們僅僅要取最小值29即為結果 輸入:整數N(0 ≤ N ≤ 10^9) 輸出:假設存在這種Q,則輸出Q,假設不存在,輸出-1 */ public class NewIntProduct { public static int getNew(int input) { // 若該數是各位數,那麽最小的肯定是1X該數 if (input >= 0 && input <= 9) { return 10 + input; } List<Integer> list = new ArrayList<Integer>();// 存放滿足要求的乘數 list = getNew(input, list);// 遞歸獲取 // 若list中含有-1,說明初始數input本身或者input的約數不滿足條件 if (list.contains(-1)) { return -1; } // 將list排序 Collections.sort(list); int len = list.size(); int result = 0;// 終於的返回值 // 依據list中的各位數拼成終於的返回值 for (int i = len - 1; i >= 0; i--) { result += Math.pow(10, len - 1 - i) * list.get(i); } return result; } /** * @param n * 初始數 * @param list * 滿足要求的乘數 * @return */ private static List<Integer> getNew(int n, List<Integer> list) { // 若初始數已經是一個個位數,則直接加入到list中,並跳出遞歸 if (n >= 0 && n <= 9) { list.add(n); return list; } boolean flag = false;// 是否存在個位數的約數的標誌 // 依次用9-2,作為除數,看初始數是否存在個位數的約數 for (int i = 9; i >= 2; i--) { // 若存在 if (n % i == 0) { flag = true; list.add(i);// 將該約束加入到list中 getNew(n / i, list);// 遞歸查找商數的滿足條件的約束 break; } } // 不存在,說明不滿足條件 if (!flag) { list.add(-1); } return list; } public static void main(String[] args) { System.out.println(getNew(18)); } }
京東軟開2015筆試:尋找滿足條件的整數