超长代码求调,胆小慎入
查看原帖
超长代码求调,胆小慎入
979476
Lastheart楼主2024/11/20 19:58

输出非常逆天

输入

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;
}
2024/11/20 19:58
加载中...