dfs搜索,实际上每次只有一个前进的方向,记录进位与当前位,用一个bool标记即可。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 int n,k; 5 bool ok,g[10][10]; 6 void dfs(int res,int add) 7 { 8 if(res*n+add==k) 9 { 10 ok=true; 11 return; 12 } 13 else if(g[res][add]) 14 { 15 return; 16 } 17 g[res][add]=true; 18 int x=res*n+add,y=x%10; 19 x/=10; 20 dfs(y,x); 21 if(ok) 22 printf("%d",y); 23 } 24 int main() 25 { 26 int T; 27 for(scanf("%d",&T);T;T--) 28 { 29 scanf("%d%d",&n,&k); 30 if(n>k) 31 printf("0\n"); 32 else if(n==1) 33 printf("%d\n",k); 34 else 35 { 36 ok=false; 37 memset(g,false,sizeof(g)); 38 dfs(k,0); 39 if(!ok) 40 printf("0\n"); 41 else 42 printf("%d\n",k); 43 } 44 } 45 return 0; 46 }