码迷,mamicode.com
首页 > 其他好文 > 详细

Find the smallest number whose digits multiply to a given number n

时间:2014-07-16 08:55:04      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   strong   os   art   

Given a number ‘n’, find the smallest number ‘p’ such that if we multiply all digits of ‘p’, we get ‘n’. The result ‘p’ should have minimum two digits.

Examples:

Input:  n = 36
Output: p = 49 
// Note that 4*9 = 36 and 49 is the smallest such number

Input:  n = 100
Output: p = 455
// Note that 4*5*5 = 100 and 455 is the smallest such number

Input: n = 1
Output:p = 11
// Note that 1*1 = 1

Input: n = 13
Output: Not Possible

For a given n, following are the two cases to be considered.
Case 1: n < 10 When n is smaller than n, the output is always n+10. For example for n = 7, output is 17. For n = 9, output is 19.

Case 2: n >= 10 Find all factors of n which are between 2 and 9 (both inclusive). The idea is to start searching from 9 so that the number of digits in result are minimized. For example 9 is preferred over 33 and 8 is preferred over 24.
Store all found factors in an array. The array would contain digits in non-increasing order, so finally print the array in reverse order.

 

 1     public static int findSmallest(int n){
 2         if(n < 10) return 10 + n;
 3         int out = 0;
 4         int pos = 0;
 5         for(int i = 9; i > 1; i --){
 6             while(n % i == 0){
 7                 n /= i;
 8                 out += i * Math.pow(10, pos);
 9                 pos ++;
10             }
11         }
12         return n ==1 ? out : -1;
13     }

 

Find the smallest number whose digits multiply to a given number n,布布扣,bubuko.com

Find the smallest number whose digits multiply to a given number n

标签:style   blog   color   strong   os   art   

原文地址:http://www.cnblogs.com/reynold-lei/p/3847847.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!