计算:
题目描述:
找出每位乘积为n的最小数,如36=>49(49=36),2=>12(12=2)
输入一个正整数n,返回一个最小正整数m(m至少是2位数),
使得m的各位乘积等于n,例如输入36,输出49,输入100,输出455,
对于某个n不存在这样的m,请返回-1
输入描述:
输出描述:
示例1:
输入:
输出:
思路:1,找出因数
2,几对因数组合,然后比较
代码:
/**输入一个正整数n,返回一个最小正整数m(m至少是2位数),
* 使得m的各位乘积等于n,例如输入36,输出49,输入100,输出455,
* 对于某个n不存在这样的m,请返回-1
* 思路:1,找出因数
* 2,几对因数组合,然后比较
*/
import java.util.*;
public class Solution {
/**
* 输入一个整形数值,返回一个整形值
* @param n int整型 n>9
* @return int整型
*/
public int solution (int n) {
// write code here
int n0=n;
String str="";
//剪枝
if(n0<=9){
return n0+10;
}
//从大到小,寻找因数,保存在字符串str中,
//保证低数位的数大就会整体小
for(int i=9;i>=2;){
if(n0%i==0){
str+=i;
n0=n0/i;
continue;
}else{
i--;
}
}
int j=0;
int nn=1;
while(j<str.length()){
nn=nn*Integer.parseInt(str.charAt(j)+"");
j++;
}
if(nn!=n){return -1;}
//从大到小,反转一次
String a="";
for(int i=str.length()-1;i>=0;i--){
a+=str.charAt(i);
}
return Integer.parseInt(a);
}
}