输出非常逆天
输入
1 1
输出
0 0 (空) 1 0
空格换行不用管,只是为了方便打
#include<bits/stdc++.h> //代码全来自不同的教练,所以有的变量名非常奇怪,有些是string有些是字符数组
using namespace std;
string x,y;
int jjia=0,ajia[100001],bjia[100001],cjia[100001]; //加法变量数组
bool xjia=false;
char sjia[100001],ssjia[100001];
string s1z,s2z; //减法变量数组
char a1x[10001],b1x[10001];
int ax[10001],bx[10001],lenx,cx[10001]; //乘法变量数组
int isbig(string x,string y){ //减法中判断数大小
if(x.size()>y.size())return 1;
else if(x.size()<y.size())return 0;
else {
for(int i=0;i<x.size();i++){
if(y[i]>x[i])return 1;
else if(x[i]<y[i])return 0;
}
}
return 2;
}
void calc(string x,string y){ //减法计算
int cz[10110],dz[10110],ez[10110];
memset(cz,0,sizeof(cz));
memset(dz,0,sizeof(dz));
memset(ez,0,sizeof(ez));
for(int i=0;i<x.size();i++){
cz[i]=x[i]-'0';
}
for(int i=0;i<y.size();i++){
dz[i]=y[i]-'0';
}
for(int i=0;i<max(x.size(),y.size());i++){
ez[i]=cz[i]-dz[i];
if(ez[i]<0){
ez[i]+=10;
cz[i+1]--;
}
}
int qz=1;
for(int i=max(x.size(),y.size());i>=0;i--){
if(ez[i]!=0)qz=0;
if(!qz){
cout<<ez[i];
}
}
}
void work(){ //减法输出
if(isbig(x,y)==1){
calc(x,y);
}
else if(isbig(x,y)==0){
cout<<"-";
calc(y,x);
}
else cout<<0;
}
int pd(vector<int> &a,vector<int> &b) //除法
{
int n=a.size(),m=b.size();
if(n!=m)
{
if(n>m) return 1;
else return -1;
}
else
{
for(int i=0;i<n;i++)
{
if(a[i]>b[i]) return 1;
else if(a[i]<b[i]) return -1;
}
return 0;
}
}
vector<int> sub(vector<int> a,vector<int> b) //除法
{
vector<int> c;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
for(int i=0;i<a.size();i++)
{
int t=a[i];
if(i<b.size()) t-=b[i];
if(t<0)
{
a[i+1]--;
t+=10;
}
c.push_back(t);
}
while(c.size()>1&&c.back()==0) c.pop_back();
reverse(c.begin(),c.end());
return c;
}
pair<vector<int>,vector<int>> f(vector<int> a,vector<int> b) //除法
{
vector<int> q;
vector<int> r;
for(int x:a)
{
if(r.size()==1&&r[0]==0) r.pop_back();
r.push_back(x);
int t=0;
while(pd(r,b)>=0)
{
r=sub(r,b);
t++;
}
q.push_back(t);
}
reverse(q.begin(),q.end());
while(q.size()>1&&q.back()==0) q.pop_back();
reverse(q.begin(),q.end());
return {q,r};
}
int main()
{
memset(ajia,0,sizeof(ajia)); //141-166加法
memset(bjia,0,sizeof(bjia));
memset(cjia,0,sizeof(cjia));
ajia[0]=x.size();
bjia[0]=y.size();
for(int i=1;i<=ajia[0];i++) ajia[i]=sjia[ajia[0]-i]-'0';
for(int i=1;i<=bjia[0];i++) bjia[i]=ssjia[bjia[0]-i]-'0';
for(jjia=1;jjia<=max(ajia[0],bjia[0])+1;jjia++)
{
cjia[jjia]=ajia[jjia]+bjia[jjia];
if(cjia[jjia]>=10)
{
cjia[jjia]%=10;
ajia[jjia+1]++;
}
}
cjia[0]=jjia;
if(cjia[jjia+1]>0) cjia[0]++;
for(int i=cjia[0];i>=1;i--)
{
if(xjia==false&&cjia[i]==0) continue;
xjia=true;
cout<<cjia[i];
}
if(xjia==false) cout<<0;
cout<<endl;
//170-173减法
reverse(x.begin(),x.end());
reverse(y.begin(),y.end());
work();
cout<<endl;
//178-200乘法
int lenax=x.size();
int lenbx=y.size();
for(int i=1;i<=lenax;i++) ax[i]=x[lenax-i]-'0';
for(int i=1;i<=lenbx;i++) bx[i]=y[lenbx-i]-'0';
for(int i=1;i<=lenbx;i++)
{
for(int j=1;j<=lenax;j++)
{
cx[i+j-1]+=ax[j]*bx[i];
}
}
for(int i=1;i<lenax+lenbx;i++)
{
if(cx[i]>9)
{
cx[i+1]+=cx[i]/10;
cx[i]%=10;
}
}
lenx=lenax+lenbx;
while(cx[lenx]==0&&lenx>1)lenx--;
for(int i=lenx;i>=1;i--)cout<<cx[i];
cout<<endl;
string x,y; //204-214除法
vector<int> a,b;
cin>>x>>y;
for(int i=0;i<x.size();i++) a.push_back(x[i]-'0');
for(int i=0;i<y.size();i++) b.push_back(y[i]-'0');
pair<vector<int>,vector<int>> p=f(a,b);
vector<int> q=p.first;
vector<int> r=p.second;
for(int i=0;i<q.size();i++) cout<<q[i];
cout<<endl;
for(int i=0;i<r.size();i++) cout<<r[i];
return 0;
}