注意两点,倒着搜,效率高,注意0和1时候的特判。。。忘了UVA的longlong,CE一次。
1 #include <stdio.h> 2 #include <string.h> 3 int p[100],z; 4 long long n; 5 void dfs(long long n,int step) 6 { 7 int i; 8 if(z) return ; 9 if(n == 1) 10 { 11 z = 1; 12 for(i = step-1; i >= 1; i --) 13 printf("%d",p[i]); 14 printf("\n"); 15 return ; 16 } 17 for(i = 9; i >= 2; i --) 18 { 19 if(n%i == 0) 20 { 21 p[step] = i; 22 dfs(n/i,step+1); 23 } 24 } 25 } 26 int main() 27 { 28 int t; 29 scanf("%d",&t); 30 while(t--) 31 { 32 z = 0; 33 memset(p,0,sizeof(p)); 34 scanf("%lld",&n); 35 if(n == 0||n == 1) 36 printf("%lld\n",n); 37 else 38 { 39 dfs(n,1); 40 if(!z) 41 printf("-1\n"); 42 } 43 } 44 return 0; 45 }