吸氧一半绿一半紫求助
查看原帖
吸氧一半绿一半紫求助
342185
__builtin_orz楼主2023/10/4 11:17
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
vector<int>s2v(string str){
	vector<int>r;
	r.clear();
	for(char c:str)
		r.push_back(c-'0');
	return r;
}
string v2s(vector<int>v){
	string str;
	str.clear();
	for(int i:v)
		str.push_back(i+'0');
	return str;
}
template<typename t>
void reverse(vector<t>&v){
	reverse(v.begin(),v.end());
}
vector<int>df0(vector<int>t){
	reverse(t);
	while(t.back()==0)
		t.pop_back();
	reverse(t);
	if(t.empty())
		return vector<int>{0};
	return t;
}
template<typename t>
ostream&operator<<(ostream&os,vector<t>v){
	if(v.size()==0)
		os<<"[]";
	else{
		os<<"[";
		bool b=1;
		for(t i:v){
			if(b)
				b=0;
			else
				cout<<",";
			os<<i;
		}
		os<<"]";
	}
}
vector<int>flat(vector<int>&v){
	reverse(v);
	for(int i=0;i<v.size();i++){
		if(v[i]>=10){
			if(i==v.size()-1)
				v.push_back(v[i]/10);
			else
				v[i+1]+=v[i]/10;
			v[i]%=10;
		}
		if(v[i]<0){
			v[i+1]--;
			v[i]+=10;
		}
	}
	reverse(v);
	return v;
}
vector<int>operator+(vector<int>v,vector<int>vv){
	reverse(v.begin(),v.end());
	reverse(vv.begin(),vv.end());
	for(int i=0;i<v.size();i++){
		if(i>=vv.size())
			vv.push_back(0);
		vv[i]+=v[i];
	}
	reverse(vv.begin(),vv.end());
	return flat(vv);
}
vector<int>operator*(vector<int>v,int a){
	for(int&i:v)
		i*=a;
	return flat(v);
}
vector<int>mul10(vector<int>v,int a=1){
	if(v==vector<int>{0})
		return v;
	for(int i=1;i<=a;i++)
		v.push_back(0);
	return v;
}
vector<int>operator*(vector<int>v,vector<int>vv){
	vector<int>ans;
	ans.clear();
	for(int i=vv.size()-1;i>=0;i--){
		ans=ans+mul10(v*vv[i],vv.size()-1-i);
	}
	return ans;
}
bool operator==(vector<int>v,vector<int>vv){
	if(v.size()==vv.size()){
		for(int i=0;i<v.size();i++)
			if(v[i]!=vv[i])
				return false;
		return true;
	}
	return false;
}
bool operator>(vector<int>v,vector<int>vv){
	if(v.size()>vv.size())
		return true;
	if(v.size()<vv.size())
		return false;
	for(int i=0;i<v.size();i++){
		if(v[i]>vv[i])
			return true;
		if(v[i]<vv[i])
			return false;
	}
	return false;
}
bool operator<(vector<int>v,vector<int>vv){
	if(v.size()<vv.size())
		return true;
	if(v.size()>vv.size())
		return false;
	for(int i=0;i<v.size();i++){
		if(v[i]<vv[i])
			return true;
		if(v[i]>vv[i])
			return false;
	}
	return false;
}
bool operator!=(vector<int>v,vector<int>vv){
	if(v.size()==vv.size()){
		for(int i=0;i<v.size();i++)
			if(v[i]!=vv[i])
				return true;
		return false;
	}
	return true;
}
bool operator>=(vector<int>v,vector<int>vv){
	if(v.size()>vv.size())
		return true;
	if(v.size()<vv.size())
		return false;
	for(int i=0;i<v.size();i++){
		if(v[i]>vv[i])
			return true;
		if(v[i]<vv[i])
			return false;
	}
	return true;
}
bool operator<=(vector<int>v,vector<int>vv){
	if(v.size()<vv.size())
		return true;
	if(v.size()>vv.size())
		return false;
	for(int i=0;i<v.size();i++){
		if(v[i]<vv[i])
			return true;
		if(v[i]>vv[i])
			return false;
	}
	return true;
}
vector<int>operator-(vector<int>v,vector<int>vv){
	if(vv>v)
		swap(v,vv);
	reverse(v);
	reverse(vv);
	for(int i=0;i<vv.size();i++){
		if(v[i]<vv[i]){
			v[i+1]--;
			v[i]+=10;
		}
		v[i]-=vv[i];
	}
	reverse(v);
	return df0(flat(v));
}
vector<int>operator/(vector<int>v,vector<int>vv){
	vector<int>ans;
	ans.clear();
	vector<int>t;
	t.clear();
	for(int i:v){
		int tt=0;
		t.push_back(i);
		while(t>=vv){
			tt++;
			t=t-vv;
		}
		ans.push_back(tt);
	}
	return df0(ans);
}
vector<int>operator%(vector<int>v,vector<int>vv){
	vector<int>ans;
	ans.clear();
	vector<int>t;
	t.clear();
	for(int i:v){
		int tt=0;
		t.push_back(i);
		while(t>=vv){
			tt++;
			t=t-vv;
		}
		ans.push_back(tt);
	}
	return t;
}
int main(){
	string s,ss;
	cin>>s>>ss;
	cout<<v2s(s2v(s)+s2v(ss))<<"\n"<<(s2v(s)<s2v(ss)?"-":"")<<v2s(s2v(s)-s2v(ss))<<"\n"<<v2s(s2v(s)*s2v(ss))<<"\n"<<v2s(s2v(s)/s2v(ss))<<"\n"<<v2s(s2v(s)%s2v(ss));
	return 0;
}
2023/10/4 11:17
加载中...