Timus 1014. The Product of Digits

Timus 1014. The Product of Digits 要求给出一个最小整数,其各位数字的乘积等于指定的数。

1014. The Product of Digits

Time Limit: 1.0 second
Memory Limit: 16 MB
Your task is to find the minimal positive integer number Q so that the product of digits of Q is exactly equal to N.

Input

The input contains the single integer number N (0 ≤ N ≤ 10 9).

Output

Your program should print to the output the only number Q. If such a number does not exist print −1.

Sample

inputoutput
10 25
Problem Source: Ural State University Internal Contest '99 #2
解答如下:
 1   using  System;
 2  using  System.IO;
 3 
 4  namespace  Skyiv.Ben.Timus
 5  {
 6     //   http://acm.timus.ru/problem.aspx?space=1 &num=1014
 7     class  T1014
 8    {
 9       static   void  Main()
10      {
11         new  T1014().Run(Console.In, Console.Out);
12      }
13 
14       void  Run(TextReader reader, TextWriter writer)
15      {
16        Out(writer, GetDigits( int .Parse(reader.ReadLine())));
17      }
18 
19       int [] GetDigits( int  n)
20      {
21         int [] digits  =   new   int [ 11 ];
22         if  (n  ==   0 ) digits[ 10 =   1 ;
23         else   if  (n  ==   1 ) digits[ 1 =   1 ;
24         else
25        {
26           for  ( int  i  =   9 ; i  >   1 ; i -- )
27          {
28             while  (n  >   1   &&  n  %  i  ==   0 )
29            {
30              n  /=  i;
31              digits[i] ++ ;
32            }
33          }
34           if  (n  !=   1 ) digits  =   null ;
35        }
36         return  digits;
37      }
38 
39       void  Out(TextWriter writer,  int [] digits)
40      {
41         if  (digits  ==   null ) writer.WriteLine( - 1 );
42         else
43        {
44           for  ( int  i  =   0 ; i  <  digits.Length; i ++ )
45          {
46             int  n  =  digits[i];
47             while  (n --   >   0 ) writer.Write(i);
48          }
49          writer.WriteLine();
50        }
51      }
52    }
53  }
54 

这题的解法还是比较直接的。但是要注意当输入 N = 0 时,输出的答案应该是 10,而不是 -1。
返回目录
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值