#2本地过了却WA
查看原帖
#2本地过了却WA
342185
__builtin_orz楼主2023/9/29 01:12
#include<iostream>
#include<array>
#include<string>
#include<sstream>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstdio>
#include<cstdlib>
using namespace std;
class UBigNum{
public:
	friend istream&operator>>(istream&in,UBigNum&x){
		char c;
		x.data.clear();
	    while(isdigit(c=in.get()))
			x.data.push_back(c-'0');
	    return in;
	}
	friend ostream&operator<<(ostream&out,UBigNum x){
		for(int i:x.data)
			out<<i;
		return out;
	}
	UBigNum(){
		data.clear();
		data.push_back(0);
	}
	UBigNum(string s){
		stringstream ss;
		ss.clear();
		ss<<s;
		ss>>*this;
	}
	UBigNum(unsigned int x){
		*this=UBigNum(to_string(x));
	}
	UBigNum& div10(int t=1){
		while(t){
			if(this->data.size()==1)
				this->data.front()=0;
			else
				this->data.pop_back();
			t--;
		}
		return *this;
	}
	UBigNum& mul10(int t=1){
		while(t){
			if(!(this->data.size()==1&&this->data.back()==0))
				this->data.push_back(0);
			t--;
		}
		return *this;
	}
	friend UBigNum operator+=(UBigNum&a,UBigNum b){
		return a=a+b;
	}
	friend UBigNum operator*=(UBigNum&a,UBigNum b){
		return a=a*b;
	}
	friend UBigNum operator+(UBigNum a,UBigNum b){
		UBigNum r;
		bool bb=false;
		r.data.clear();
		for(int i=0;i<max(a.data.size(),b.data.size());i++){
			if(bb)
				bb=false;
			else
				r.data.push_back(0);
			if(i<a.data.size())
				r.data.back()+=a.data[a.data.size()-i-1];
			if(i<b.data.size())
				r.data.back()+=b.data[b.data.size()-i-1];
			if(r.data.back()>=10){
				r.data.back()%=10;
				r.data.push_back(1);
				bb=true;
			}
		}
		reverse(r.data.begin(),r.data.end());
		return r;
	}
	friend UBigNum operator*(UBigNum a,UBigNum b){
		if(a.data.size()==1&&a.data.front()==0||b.data.size()==1&&b.data.front()==0)
			return UBigNum(0);
		UBigNum r;
		r.data.clear();
		if(b.data.size()==1){
			bool bb=false;
			int t=b.data.front();
			for(int i=0;i<a.data.size();i++){
				if(bb)
					bb=false;
				else
					r.data.push_back(0);
				r.data.back()+=a.data[a.data.size()-i-1]*t;
				if(r.data.back()>=10){
					int tt=r.data.back()/10;
					r.data.back()%=10;
					r.data.push_back(tt);
					bb=true;
				}
			}
			reverse(r.data.begin(),r.data.end());
			return r;
		}
		if(a.data.size()==1){
			return b*a;
		}
		for(int i=b.data.size()-1;i>=0;i--){
			r+=a*UBigNum(b.data[i]);
			a.mul10();
		}
		return r;
	}
private:
	vector<unsigned int>data;
};
UBigNum a,b;
int main(){
	cin>>a>>b;
	cout<<a*b<<"\n";
	return 0;
}

12345*65432=807758040 why?

2023/9/29 01:12
加载中...