关于高精
  • 板块灌水区
  • 楼主lhz2022
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/24 19:51
  • 上次更新2024/8/24 22:06:27
查看原帖
关于高精
822439
lhz2022楼主2024/8/24 19:51
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 100007
#define int long long
int v_a[N],v_b[N],v_c[N];
bool lower(string a,string b){
	int asz=a.size(),bsz=b.size();
	if(asz!=bsz)  return asz<bsz;
	for(int i=0;i<asz;++i){
		if(a[i]!=b[i]) return a[i]<b[i];
	}
	return 0;
}
string add(string a,string b){
	int la=a.size(),lb=b.size();
	reverse(a.begin(),a.end());
	reverse(b.begin(),b.end());
	memset(v_a,0,sizeof(v_a));
	memset(v_b,0,sizeof(v_b));
	memset(v_c,0,sizeof(v_c));
	for(int i=0;i<la;++i) v_a[i]=a[i]-'0';
	for(int i=0;i<lb;++i) v_b[i]=b[i]-'0';
	for(int i=0;i<=max(la,lb);++i) v_c[i]=v_a[i]+v_b[i];
	for(int i=0;i<=max(la,lb);++i){
		if(v_c[i]>=10){
			v_c[i]-=10;
			v_c[i+1]++;
		}
	}
	reverse(v_c,v_c+max(la,lb)+1);
	int h=0;
	string as;
	for(int j=0;j<=max(la,lb);++j){
		if(!h&&v_c[j]==0) continue;
		else{
			as.push_back(v_c[j]+'0');
			h=1;
		}
	}
	return as;
}
string jian(string a,string b){
	int la=a.size(),lb=b.size();
	reverse(a.begin(),a.end());
	reverse(b.begin(),b.end());
	memset(v_a,0,sizeof(v_a));
	memset(v_b,0,sizeof(v_b));
	memset(v_c,0,sizeof(v_c));
	for(int i=0;i<la;++i) v_a[i]=a[i]-'0';
	for(int i=0;i<lb;++i) v_b[i]=b[i]-'0';
	for(int i=0;i<max(la,lb);++i) v_c[i]=v_a[i]-v_b[i];
	for(int i=0;i<max(la,lb);++i){
		if(v_c[i]<0){
			v_c[i]+=10;
			v_c[i+1]--;
		}
	}
	reverse(v_c,v_c+max(la,lb));
	int h=0;
	string as;
	int asz=a.size();
	for(int j=0;j<asz;++j){
		if(!h&&v_c[j]==0) continue;
		else{
			as.push_back(v_c[j]+'0');
			h=1;
		}
	}
	return as;
}
string mul(string a,int b){
	int la=a.size();
	reverse(a.begin(),a.end());
	memset(v_a,0,sizeof(v_a));
	memset(v_c,0,sizeof(v_c));
	for(int i=0;i<la;++i) v_a[i]=a[i]-'0';
	for(int i=0;i<la;++i) v_c[i]=v_a[i]*b;
	int i;
	for(i=0;i<la;++i) v_c[i+1]+=v_c[i]/10,v_c[i]%=10;
	while(1){
		v_c[i+1]+=v_c[i]/10;
		v_c[i] %=10;
		if(v_c[++i]==0) break;
	}
	reverse(v_c,v_c+la+1);
	int h=0;
	string as;
	for(int j=0;j<i;++j){
		if(!h&&v_c[j]==0) continue;
		else{
			as.push_back(v_c[j]+'0');
			h=1;
		}
	}
	return as;
}

string mul1(string a,string b){
	if(a=="0"||b=="0") return "0";
	int la=a.size(),lb=b.size();
	reverse(a.begin(),a.end());
	reverse(b.begin(),b.end());
	memset(v_a,0,sizeof(v_a));
	memset(v_b,0,sizeof(v_b));
	memset(v_c,0,sizeof(v_c));
	for(int i=0;i<la;++i) v_a[i]=a[i]-'0';
	for(int i=0;i<lb;++i) v_b[i]=b[i]-'0';
	for(int i=0;i<la;++i){
		for(int j=0;j<lb;++j){
			v_c[i+j]+=v_a[i]*v_b[j];
		}
	}
	int i;
	for(i=0;i<la+lb;++i) v_c[i+1]+=v_c[i]/10,v_c[i]%=10;
	while(1){
		v_c[i+1]+=v_c[i]/10;
		v_c[i]%=10;
		if(v_c[++i]==0) break;
	}
	reverse(v_c,v_c+la+lb+1);
	int h=0;
	string as;
	for(int j=0;j<i;++j){
		if(!h&&v_c[j]==0) continue;
		else{
			as.push_back(v_c[j]+'0');
			h=1;
		}
	}
	return as;
}


string div(string a,int b){
	if(lower(a,to_string(b))) return "0";
	int res=0;
	string r;
	int sza=a.size();
	for(int i=0;i<sza;i++){
		res*=10;
		res+=a[i]-'0';
		if(res>=b){
			r.push_back(res/b+'0');
			res=res-res/b*b;
		}
		else{
			if(r!="")r.push_back('0');
		}
	}
	return r;
}
int mod(string a,int b){
	int ans=0;
	for(int i=0;i<a.size();++i){
		ans=(ans*10+(a[i]-'0'))%b;
	}
	return ans;
}
signed main(){
	//freopen("excel.in","r",stdin);
	//freopen("excel.out","w",stdout);
	string a,b;
	cin>>a>>b;
	string c;
	while(b!="0"){
		int md=mod(b,26);
		if(md==0) md=26;
		c+=md+'A'-1;
		b=jian(b,to_string(md));
		b=div(b,26);
	}
	reverse(c.begin(),c.end());
	cout<<c<<a;
}

请问这里面的

memset(v_a,0,sizeof(v_a));

memset(v_b,0,sizeof(v_b));

是否可以删去

2024/8/24 19:51
加载中...