心态崩了 求调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;
}