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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值