#10第三行wa求调
查看原帖
#10第三行wa求调
193412
Hsy23333楼主2023/10/12 09:17

心态崩了 求调qwq

#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
string x,y;
char jg[3][10004],p[10004];
char cfjg[100000004],tmp[100000004],yushu[10004];
long long mnl,mxl,lena,lenb;
bool f[5],qaq,qwq,awa,svr,zzz,jojo,orz;
void Ad(string a,string b){
	int jinwei=0;
	reverse(a.begin(),a.end());	reverse(b.begin(),b.end());
	if(lena<lenb){
		mnl=lena;	mxl=lenb;
		a.resize(mxl);
	}
	else{
		mxl=lena;	mnl=lenb;
		b.resize(mxl);
	}
	for(int i=0;i<=mxl-1;i++){
		if(a[i]){
			if(b[i]){
				jg[0][i]=(a[i]+b[i]-'0'*2+jinwei)%10+'0';
				jinwei=(a[i]+b[i]-'0'*2+jinwei)/10;
			}
			else{
				jg[0][i]=(a[i]-'0'+jinwei)%10+'0';
				jinwei=(a[i]-'0'+jinwei)/10;
			}
		}
		else{
			jg[0][i]=(b[i]-'0'+jinwei)%10+'0';
			jinwei=(b[i]-'0'+jinwei)/10;
		}
	}
	if(jinwei){
		jg[0][mxl]=jinwei+'0';	f[0]=1;
	}
	return;
}
void Ds(string a,string b){
	string tmp;
	if(lena<lenb){
		f[1]=1;	tmp=a;	a=b; b=tmp;
	}
	if(lena==lenb){
		for(int i=0;i<=lena-1;i++){
			if(a[i]>b[i])	break;
			if(a[i]<b[i]){
				f[1]=1;	tmp=a;	a=b; b=tmp;	break;
			}
		}
	}//cout<<"a="<<a<<endl<<"b="<<b<<endl<<"mxl="<<mxl<<endl;
//cout<<"lena="<<a.length()<<" lenb="<<b.length()<<endl;
	reverse(a.begin(),a.end());	reverse(b.begin(),b.end());
	int tuiwei=0;
	b.resize(mxl);
	for(int i=0;i<=mxl-1;i++){
		if(b[i]>='0' && b[i]<='9'){//cout<<"***";
			jg[1][i]=(a[i]-b[i]-tuiwei)+'0';
			tuiwei=0;
			if(jg[1][i]<'0'){
				jg[1][i]+=10;	tuiwei=1;
			}
		}
		else{//cout<<"i="<<i<<endl;
			jg[1][i]=a[i]-tuiwei;
			tuiwei=0;
			if(jg[1][i]<'0'){
				jg[1][i]+=10;	tuiwei=1;
			}
		}//cout<<"a["<<i<<"]="<<a[i]<<" b["<<i<<"]="<<b[i]<<" result="<<jg[1][i]<<endl;
	}
	return;
}
void Tm(string a,string b){
	reverse(a.begin(),a.end());	reverse(b.begin(),b.end());
//	a.resize(mxl);	b.resize(mxl);
	int jinwei=0;
	for(int i=0;i<=lenb-1;i++)	if(b[i]!='0'){
		jinwei=0;
		for(int j=0;j<=lena-1;j++){
			tmp[i+j]=((a[j]-'0')*(b[i]-'0')+jinwei)%10;//int
			jinwei=((a[j]-'0')*(b[i]-'0')+jinwei)/10;
		}
		if(jinwei){//cout<<"*";
			cfjg[i+lena]=jinwei;//int
			if(i==lenb-1)	f[2]=1;
		}
		jinwei=0;
		for(int j=0;j<=lena;j++){
/*cout<<"cfjg["<<i+j<<"]="<<int(cfjg[i+j])<<endl;
cout<<"tmp["<<i+j<<"]="<<int(tmp[i+j])<<endl;
cout<<"jw="<<jinwei<<endl<<endl;*/
			char tmpc=cfjg[i+j];								//易错... 
			cfjg[i+j]=(cfjg[i+j]+tmp[i+j]+jinwei)%10;//int
			jinwei=(tmpc+tmp[i+j]+jinwei)/10;
			if(j==lena-1){
				if(jinwei)	f[2]=1;
				if(!f[2])	break;
			}
		}
	}
	return;
}
void Dv(string a,string b){							//VERY SEVERE!!!
	if(lena<lenb){//如果a位数小于b,直接爆0 
		f[3]=1;	return;
	}
	int zgw=0,jiewei;
	for(int i=lenb-1;i<=lena-1;i++){//i指向本次被除数的最末位 
		awa=0;	svr=0;//cout<<"i="<<i<<endl;
		for(int j=zgw;j<=i-lenb+1;j++){//从上次余数的最高位开始扫 
			if(!awa && a[j]!='0'){//本次最高位还没确定时,若该位不为‘0’,标记 
				zgw=j;	awa=1;	break;
			}//cout<<"*j="<<j<<" i="<<i<<endl;
			if(j==i-lenb+1){//cout<<"**"<<endl;
				if(i!=lena-1)	for(int k=j+1;k<=lena-lenb;k++){//检测一手后面还有没有数 
					if(a[k]!='0' && k!=lena-lenb){//如果存在可以继续除的数 
/*						for(int r=i;r<=k+lenb-1;r++){//那么先把这之前的结果赋值0(初始值为0所以可以注释掉)
							jg[2][r]=0;
						}*/
						i=(k+lenb-1)/*-1*/;	zgw=k;	orz=1;	break;//i和zgw挪到相应位置,继续做 (i再-1的原因是break后外面会再+1)(?)
					}//cout<<"***"<<endl;
					if(k==lena-lenb && a[k]>=b[0]){//如果最后一位有可能继续除下去 
						i=k+lenb-1/*-1*/;	zgw=k;	orz=1;	break;//同上 
					}
				}
				if(orz){//cout<<"+++++"<<endl;
					orz=0;	continue;
				}
				for(int k=0;k<=lena-1;k++){
					p[k]=a[k];	if(p[k]==0){
						p[k]='0';
						}//cout<<"&&&"<<endl;
				}/*cout<<"!!!!!"<<int(jg[2][2])<<endl;*/
				return;	//若最高位找不到,说明除完了 
			}
		}//cout<<"zgw="<<zgw<<endl;
		if(i-zgw+1==lenb){//如果余数和除数位数相等 
			xvnhuanjianqv:{//cout<<"a "<<a[0]<<a[1]<<a[2]<<a[3]<<a[4]<<endl<<"zgw="<<zgw<<" i="<<i<<endl<<endl;
				jiewei=0;
				for(int j=zgw;j<=i;j++){//从本次确定的最高位开始,判断余数和除数大小关系 
					if(a[j]>b[j-zgw]){//从高往低比较,某位出现a>b,则余数大于除数,循环减去除数 
						for(int k=i;k>=zgw;k--){
							a[k]=a[k]-b[k-zgw]-jiewei;
							if(a[k]<0){
								jiewei=1;	a[k]+=10;
							}
							else	jiewei=0;
							a[k]=a[k]%10+'0';
						}
						jg[2][i]++;//cout<<"^"<<int(jg[2][2])<<endl;
						goto	xvnhuanjianqv;
						break;
					}//cout<<"a["<<j<<"]="<<a[j]<<" b["<<j-zgw<<"]="<<b[j-zgw]<<endl;
					if(a[j]<b[j-zgw]){//cout<<"^^^^^"<<endl;
						break;//b>a,让i右移
					}
					if(j==i){
						for(int k=i;k>=zgw;k--){//如果ab完全一致 
							a[k]='0';//cout<<"^"<<int(jg[2][2])<<endl;
						}
						jg[2][i]++;
					}
				}
			}
		}
		else{//其他情况,余数比除数多一位 
			xvnhuanjianqv2:{//cout<<"a "<<a[0]<<a[1]<<a[2]<<a[3]<<a[4]<<endl<<"zgw="<<zgw<<" i="<<i<<endl<<endl;
				jiewei=0;
				for(int j=i;j>=zgw+1;j--){
					a[j]=a[j]-b[j-zgw-1]-jiewei;
					if(a[j]<0){
						jiewei=1;	a[j]+=10;
					}
					else	jiewei=0;
					a[j]=a[j]%10+'0';
				}
				jg[2][i]++;//cout<<"^"<<int(jg[2][2])<<endl;
				if(jiewei)	a[zgw]--;
				if(a[zgw]!='0')	goto xvnhuanjianqv2;//如果最高位没有减完,继续 
				else{//减到位数相同了,做另一种情况 
					zgw++;//cout<<"&&&&&zgw="<<zgw<<endl;
					goto xvnhuanjianqv;
					break;
				}
			}
		}
		if(svr)	continue;
	}
	for(int i=0;i<=lena-1;i++){
		p[i]=a[i];	if(p[i]==0){
			p[i]='0';//cout<<"&&&"<<endl;
		}
	}
	return;
}
int main(){
	cin>>x>>y;
	lena=x.length();	lenb=y.length();
	Ad(x,y);
	if(f[0])	cout<<jg[0][mxl];
	for(int i=mxl-1;i>=0;i--)	cout<<jg[0][i];
	cout<<endl;//add part
//cout<<x<<endl<<y<<endl<<endl;

	Ds(x,y);
	if(f[1])	cout<<'-';
	for(int i=mxl-1;i>=0;i--){
		if(jg[1][i]!='0' || qaq){
			cout<<jg[1][i];	qaq=1;
		}
	}
	if(!qaq)	cout<<0;
	cout<<endl;//decrease part
	
	Tm(x,y);
	if(f[2]){
		cout<<char(cfjg[lena+lenb-1]+'0');
		qwq=1;					//易错... 
	}
	for(int i=lena+lenb-2;i>=0;i--){
		if(!f[2] && !cfjg[i] && !qwq)	continue;
		cout<<char(cfjg[i]+'0');	qwq=1;
	}
	if(!qwq)	cout<<0;
	cout<<endl;//times part
	
	Dv(x,y);
	if(f[3]){
		cout<<0<<endl;
		for(int i=0;i<=lena-1;i++)	cout<<x[i];
		return 0;
	}
	for(int i=0;i<=lena-1;i++){
		if(jg[2][i]!=0 || zzz){
			cout<<char(jg[2][i]+'0');	zzz=1;
		}
	}
	if(!zzz)	cout<<0;
	cout<<endl;//division part

	for(int i=0;i<=lena-1;i++){
		if(jojo || p[i]!='0'){
			cout<<char(p[i]);	jojo=1;
		}
	}
	if(!jojo)	cout<<0;
	return 0;
}
2023/10/12 09:17
加载中...