首页 > 试题广场 >

请编写一个函数func,输入一个正整数n,返回一个最小的正整

[问答题]
请编写一个函数func,输入一个正整数n,返回一个最小的正整数m,(m>9,即m至少是两位数),且m的各位成绩等于n,例如输入36,输出49;输入100,输出455,如果对于某个n不存在这样的m,请输出-1。语言不限,但是不能够写伪代码。
首先 要计算出输入的整数计算出应该有多少个数乘积大于这个数(最小的那个),根据整数的规律但个数最大是 9*9=81 最大乘积的两位数。然后依次乘下去,计算出来的最少有多个个数。根据求的个数,对输入的n进行(1-9)求余 存放在一个集合里面,   最后   ,然后根据*10的规律计算出最小的数。这道题的其实等价于求一个正整数n依次求余出现的整数,最后进行组合得到最小的正整数。
举个例子:比如98=2*49=2*7*7
9*9*9>98 此时大于98(最小意味这个各个位数最好在9以内)。
int func(int n) {
		int result = 0;
		int index = 0;// 数组的下标
		int byteN = 2;// 1~81得用两位数来表示
		int tmp = 9;

		while (n > 9 * tmp)// 计算大于81的数应该用几位数字表示 82~729之间用3位数表示
		{
			byteN++;
			tmp *= 9;
		}
		int[] intArr = new int[byteN];
		while (byteN != 0)// 找出满足条件的i位数
		{
			for (int j = 9; j >= 1 ; j--) {
				tmp = n;
				if (n % j == 0) {
					intArr[index++] = j;
					n /= j;
					break;
				}
			}
			if (tmp == n && n >= 10) {
				return -1;
			}
			--byteN;
		}

		for (int r=intArr.length-1; r>=0; r--) {
			result = result * 10 + intArr[r];
		}

		return result;
	}
编辑于 2015-10-19 12:57:33 回复(0)
更多回答

python版本,可以尝试一下

class Solution:
    def solution(self , n ):
        m = []

        while  n > 9:
            for i in range(9,1,-1):
                if n%i == 0:
                    n = n/i
                    m.append(str(int(i)))
                    break
            else:
                return -1

        m.append(str(int(n)))
        m = m[::-1]
        m = "".join(m)
        return int(m)
发表于 2020-03-08 16:47:08 回复(0)
设n=a1*a2*...*an m=a1a2a4...an 显然想m最小则数列应该满足 a1<=a2<=...<=an 且n要尽可能小,1<an<=9 (an>9 时明显 m是不存在的)

public class Test {
public static int check(int n){

            int temp=0;

            for(int i=9;i>1 && n>0;i--){

while(n%i==0){

temp=temp*10+i;

n/=i;

}

}

if(n>9)

return -1;

int sum=0;

while(temp!=0){

sum*=10;

sum+=temp%10;

temp/=10;

}

return sum;

}

    public static void main(String[] args) {

System.out.println(check(36));

System.out.println(check(100));

System.out.println(check(102));

System.out.println(check(105));

} }

编辑于 2015-10-21 15:27:19 回复(2)
 public class TestDemo {
    public static void main(String[] args) {
            System.out.println(function(36));
    }
    public static int function(int n){
        int m = 0;
        for(int i = 9,j=0;i>1;){
            if(n%i==0){
                n/=i;
                m=m+ (int)Math.pow(10,j++)*i;
            }else{
                i--;
            }
        }
        return m;
    }
}

发表于 2018-04-07 10:39:09 回复(0)
import java.util.Scanner;
public class Main{
    public int func(int n){
        int m=0;
        int k=9;
        int l=0;
        while(n>1&&k!=1){
            if(n%k==0){
                n/=k;
                int x=k;
                int y=l;
                while(y!=0){
                    x*=10;
                    y--;
                }
                m+=x;
                l++;        
            }else{
                k++;    
            }
        }
        if(k==1)return -1;
        else return m;
    }
}

编辑于 2017-04-16 11:58:49 回复(0)
//js写了一下,可能写的不完善,不过我暂时测的没问题。 
          function func(n){
				var newArr = [];
				(function d(n){
					var star = parseInt(''.charAt.call(n,0))+1;
					star>9 ? newArr=[]:"";
					for(star;star<=9;star++){
						if(n%star == 0){
							newArr.push(star);
							n/star>9 ? (function(){n = n/star;d(n)})():newArr.push(n/star);
							return false;
						};
					}
				})(n);
				return newArr.join("") || -1;
			}
			console.log(func(36));
			console.log(func(37));
			console.log(func(128));
			console.log(func(2256));
			console.log(func(729));
编辑于 2015-10-20 14:02:07 回复(0)