Ural1014

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 }

你可能感兴趣的:(Ural1014)