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 }
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 }