for(int i=1;i<=c[0];++i){
std::cout<<c[1]<<"\n";
d[i]=c[c[0]-i+1];
std::cout<<c[1]<<"\n";
}
上面代码(在HuiWen函数中)输出的 c1 不一样,c0=3 c1=7 c2=8 c3=1 第一个输出 7 ,第二个输出 1,删去 d 数组的赋值后正常输出。
完整代码(高精度回文)如下:
#include<bits/stdc++.h>
using namespace std;
int n,w;
char ch[1000];
int a[1000],b[1000],c[1000],d[1000]={};
void HuiWen(int,int[],int[]);
int check(int[]);
char ItoC(int);
void CtoI(char[],int[]);
void Turn(int[],int[]);
int main(){
freopen("in.in","r",stdin);freopen("out.out","w",stdout);
int n;
cin>>n;
char ch[1000];
int a[1000];
cin>>ch+1;
std::cout<<n<<' '<<ch+1<<'\n';
CtoI(ch,a);
for(int k=1;k<=30;k++){
HuiWen(n,a,c);
if(a[a[0]+1]) a[0]++;
cout<<a[0]<<endl;
for(int i=1;i<=a[0];i++){
cout<<a[i];
}
cout<<endl;
if(check(a)){
for(int i=1;i<=a[0];i++){
if(a[i]<=9)
cout<<a[i];
else cout<<ItoC(a[i]);
}
cout<<endl<<k;
return 0;
}
}
cout<<"impossible";
return 0;
}
void CtoI(char ch[],int a[]){
// std::cout<<strlen(ch+1)
a[0]=strlen(ch+1);
for(int i=1;i<=a[0];i++){
if(ch[i]>='0'&&ch[i]<='9')
a[i]=ch[i]-'0';
else a[i]=ch[i]-'a'+10;
}
}
int check(int c[]){
for(int i=1;i<=c[0];i++){
if(c[i]!=c[c[0]-i+1])
return 0;
}
return 1;
}
void HuiWen(int n,int a[],int d[]){
// std::cout<<a[0]<<"a[0\n";
for(int i=1;i<=a[0];i++){
b[i]=a[a[0]-i+1];
}
for(int i=1;i<=a[0];i++){
c[i]+=a[i]+b[i];
c[i+1]+=c[i]/n;
c[i]%=n;
}
std::cout<<a[0]<<'\n';
c[0]=a[0];
if(c[c[0]+1]) c[0]++;
d[0]=c[0];
for(int i=1;i<=c[0];++i)std::cout<<c[i]<<' ';
std::cout<<'\n';
for(int i=1;i<=c[0];++i){
std::cout<<c[1]<<"\n";
d[i]=c[c[0]-i+1];
std::cout<<c[1]<<"\n";
}
exit(0);
Turn(d,a);
}
char ItoC(int m){
if(m==10) return 'a';
if(m==11) return 'b';
if(m==12) return 'c';
if(m==13) return 'd';
if(m==14) return 'e';
if(m==15) return 'f';
if(m==16) return 'g';
}
void Turn(int a[],int c[]){
int d[1000]={};
for(int i=1;i<=c[0];i++){
d[i]=c[i];
}
for(int i=1;i<=a[0];i++){
c[i]=a[i];
}
for(int i=1;i<=c[0];i++){
a[i]=d[i];
}
d[0]=c[0];c[0]=a[0];a[0]=d[0];
}