I_am_zhima @ 2022-03-12 14:56:48
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
using namespace std;
int n,ans,a[100005],aa[100005],l;
string s;
bool pd(int x[]){//ok 回文数
for(int i=1;i<=l/2;i++)
if(x[i]!=x[l-i+1]) return 0;
return 1;
}
void in(){//ok 把s字符串附到a数组里
int j=0;
for(int i=s.length()-1;i>=0;i--) {
if(s[i]>='0'&&s[i]<='9')//数字
a[++j]=s[i]-'0';
else//十六进制的
a[++j]=s[i]-'A'+10;
}
}
void turn(int a[]){//ok 反转数字
int j=0;
for(int i=l;i>=1;i--)
aa[++j]=a[i];//存到aa数组里
}
void add(int a[],int b[]){//ok 高精加
l=s.length();
for(int i=1;i<=l;i++){
a[i]+=b[i];
a[i+1]+=a[i]/n;
a[i]%=n;
}
if(a[l+1]>0) l++;
}
int main(){
cin>>n>>s;
in();
l=s.length();
while(!pd(a)){
turn(a);
add(a,aa);
ans++;
if(ans>30) break;
}
if(ans>30) cout<<"Impossible!";
else cout<<"STEP="<<ans;
return 0;
}
by 蔡竣凯 @ 2022-03-12 15:00:14
#include<iostream>
#include<cstring>
using namespace std;
int n, a[101], b[101], ans, i;
void init(int a[]){
string s;
cin >> n >> s;
memset(a, 0, sizeof(a));
a[0] = s.length();
for(i=1;i<=a[0]; i++){
if(s[a[0]-i]>='0' && s[a[0]-i] <= '9')a[i] = s[a[0] - i] - '0';
else a[i] = s[a[0] - i] - 'A' + 10;
}
}
bool check(int a[]){
for(int i = 1;i <= a[0]; i++){
if(a[i] != a[a[0]-i+1])return false;
}
return true;
}
void add(int a[]){
int k;
for(int i = 1;i <= a[0];i++){
b[i] = a[a[0]-i+1];
}
for(int i = 1;i <= a[0]; i++){
a[i] += b[i];
}
for(int i = 1;i <= a[0]; i++){
a[i+1]+=a[i]/n;
a[i]%=n;
}
if(a[a[0]+1]>0)a[0]++;
}
int main(){
init(a);
if(check(a)){
cout << 0 << endl;
return 0;
}
ans = 0;
while(ans <= 30){
ans++;
add(a);
if(check(a)){
cout << "STEP=" << ans << endl;
return 0;
}
}
cout << "Impossible!";
}
by I_am_zhima @ 2022-03-12 23:10:32
@蔡竣凯 我看了你的代码,可是我感觉没有区别啊!!
dalao 看看我哪里错了
by I_am_zhima @ 2022-03-12 23:11:17
我还是太弱了