测试
#include<bits/stdc++.h> using namespace std; int n,m,step; string nn; int len,nex; bool dfs(unsigned long long x) { unsigned long long a=0; for(unsigned long long i=x;i;i/=n) a=a*n+i%n; nex=x+a; return x==a; } unsigned long long zf(char a) { if(a>='0'&&a<='9') return a-'0'; return a-'A'+10; } int main() { cin>>n>>nn; len=nn.size(); for(int i=0;i<len;i++) { m=m*n+zf(nn[i]); } for(step=0;!dfs(m)&&step<=30;step++) m=nex; if(step<=30) cout<<"STEP="<<step<<endl; else cout<<"Impossible!"<<endl; return 0; }
代码很简洁
毕竟是看了题解 大概思路很简单,针对每个n的值,无需进制转换,只需利用字符串 和一个公式 a=a*n+i%n, 就可以把数字反转,直接加到NEX里,再维护M的值就珂以了