Android 算法--数位之积

描述

输入一个正整数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);
    }
}
发布了42 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u013750244/article/details/104779219