疑问,赋值后元素改变。
  • 板块学术版
  • 楼主hh弟中弟
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/12/18 12:08
  • 上次更新2023/12/18 14:32:10
查看原帖
疑问,赋值后元素改变。
366639
hh弟中弟楼主2023/12/18 12:08
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函数中)输出的 c1c_1 不一样,c0=3 c1=7 c2=8 c3=1c_0=3\ c_1=7\ c_2=8\ c_3=1 第一个输出 77 ,第二个输出 11,删去 dd 数组的赋值后正常输出。
完整代码(高精度回文)如下:


#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];
}

2023/12/18 12:08
加载中...