Ural1014

题是水题。本弱用了爆搜的方法。
首先把特殊情况(Q=0,1)先判掉,从9开始往下除,去除Q,除到2,如果最后Q没变1就输出-1。
由于水平问题,DEBUG一共用了1小时TAT。
第一次,是没判断n = 0 和 n = 1 的情况,于是悲剧 。
第二次,是想当然的把 n = 0 弄成了 0 ,又一次悲剧 。
第三次,是高估了long的范围,还是悲剧……。
贴上代码……(有点丑了)
 1 #include<iostream>
 2 #define For( i, a, b ) for ( i = a; i <= b; i++ )
 3 using namespace std ;
 4 typedef long long ll ;
 5 
 6 bool check( long a ) {
 7     ll i, tem = 1 ;
 8     if ( a > 1 && a < 10 ) return true ;
 9     if ( a > 10 ) 
10     {
11         For( i, 2, 9 ) if ( a%i == 0 ) { tem = 0; break ; }
12         if ( tem ) return false ;
13     }
14     for ( i = 9; i >= 2; i-- )
15         if ( a%i == 0 ) return check( a/i ) ;
16     return false ;
17 }
18 
19 ll solve( long a ) {
20     ll i;
21     if ( a > 1 && a < 10 ) return a ;
22     for ( i = 9; i >= 2; i-- )
23         if ( a%i == 0 ) return solve( a/i ) * 10 + i ;
24 }
25 
26 int main() {
27     ll  num ;
28     cin >>num ;
29     if ( num == 1 ) {
30         cout << num ;
31         return 0 ;
32     }
33     if ( num == 0 ) {
34         cout <<10 ;
35         return 0 ;
36     }
37     if ( !check( num ) ) { 
38         cout <<-1;
39         return 0 ;
40     }
41     cout << solve( num ) ;
42     return 0 ;
43 }

posted on 2012-11-18 23:43 Cool Wings 阅读(146) 评论(0)  编辑 收藏 引用 所属分类: URAL


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜