vivo2020届春季校园招聘在线编程考试_现给定任意正整数 n,请寻找并输出最小的正整数 m(m>9),使得 m 的各位(个位、十位、百位 ... ...)之乘积等于n,若不存在则输出 -1。

题目

现给定任意正整数 n,请寻找并输出最小的正整数 m(m>9),使得 m 的各位(个位、十位、百位 … …)之乘积等于n,若不存在则输出 -1。

vivo2020届春季校园招聘在线编程考试_现给定任意正整数 n,请寻找并输出最小的正整数 m(m>9),使得 m 的各位(个位、十位、百位 ... ...)之乘积等于n,若不存在则输出 -1。_第1张图片

思路

即 i = 9…0, 依次看能不能被n整除,能的话,结果中的数就应该包含该数,又因为结果是因子相乘,所以要将每个因子相乘。

    // n 除 i = 9...1, 若到某个i余数为0,则i为其中一个因子,直到剩下最后一个小于等于9的因子,递归结束
    // 若i = 9...1都除不尽,则返回因子为-1 递归结束。
    // 若结果大于0,则返回递归结果res,否则返回-1;
    // 当 n = 22时,递归结果res = -8, 返回-1
public class vivo_36_49_100_455 {

    public static int solution(int n) {
        int res = recur(n);
        if (res > 0) return res;
        return -1;
    }

    public static int recur(int n) {
        if (n <= 9) return n;
        for (int i = 9; i > 1; i--) {
            if (n % i == 0) return recur(n/i)*10 + i;
        }
        return -1;
    }
}

注意:int i = 9; i > 1,
return recur(n/i)*10 + i;

有同学不能理解recur(n/i)*10 + i;

理解recur(n/i)*10 + i; 先要理解这是一个递归函数,递归函数就是不断向下递,直到n<9,return了。再不断向上归,将结果返回给调用它的上一层。

vivo2020届春季校园招聘在线编程考试_现给定任意正整数 n,请寻找并输出最小的正整数 m(m>9),使得 m 的各位(个位、十位、百位 ... ...)之乘积等于n,若不存在则输出 -1。_第2张图片

你可能感兴趣的:(企业真题)