A7873.回文数 题解
2025-06-25 19:32:40
发布于:北京
2阅读
0回复
0点赞
高精度进制加法
也是定义了四个函数,(说实话,有两个没啥用 [doge]
Code:
#include <bits/stdc++.h>
using namespace std;
int a[300],b[300],c[300];
void assign(int x[],int y[]){//把数组x赋值给数组y(没啥用×1
for (int i=1;i<=200;i++) y[i]=x[i];
}
void add(int x[],int y[],int z[],int n){//高精度进制加法,n为进制
for (int i=0;i<200;i++){
int t=x[i]+y[i]+z[i];
z[i+1]=t/n;
z[i]=t%n;
}
}
void rev(int x[]){//翻转数组(没啥用×2
int a=201;
while (x[a]==0) a--;
reverse(x+1,x+a+1);
}
bool ispal(int x[]){//判断回文数组
int a=201;
while (x[a]==0) a--;
for (int i=1;i<=a;i++){
if (x[i]!=x[a-i+1]){
return false;
}
}
return true;
}
int main(){
int n,ans=1;
cin>>n;
string m;
cin>>m;
reverse(m.begin(),m.end());
for (int i=0;i<m.size();i++){
if (n<=10||m[i]<='9') a[i+1]=m[i]-'0';//别忘-'0'
else{
a[i+1]=m[i]-'A'+10;//十六进制
}
}
while (ans<=30){
assign(a,b);
rev(b);
add(a,b,c,n);
if (ispal(c)){
cout<<"STEP="<<ans;
return 0;
}
assign(c,a);
memset(c,0,sizeof(c));//别忘清空数组!!!
ans++;
}
cout<<"Impossible!";
return 0;
}
这里空空如也
有帮助,赞一个