萌新为了写麦森数学习压位,结果爆零
查看原帖
萌新为了写麦森数学习压位,结果爆零
302394
dingshengyang楼主2022/1/21 13:49

RT

#include <bits/stdc++.h>
#define R register
#define inl inline
#define fastios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define Debug(file) freopen(file".in","r",stdin);freopen(file".out","w",stdout);
using namespace std;
const int base = 1e8;

struct bigint{
	vector<int> s;
	bigint operator = (long long num){
		while(num>=base){
			s.push_back(num%base);
			num/=base;
		}
		if(num)s.push_back(num);
		return *this;
	}
	void puts(){
		for(int i = s.size()-1;i >= 0;i --){
			printf("%d",s[i]);
		}
	}
	void scan(){
		s.clear();
		string str;
		cin >> str;
		for(int i = 0;i < (int(str.size())+7)>>3;i ++)s.push_back(0);
		const int y = (int(str.size())+7)>>3;
		int pointer = 0,cnt = 0,tmp = 0;
		for(int i = y-1;i >= 0;i --){
			cnt = tmp = 0;
			for(;cnt <= 7; cnt ++)tmp = tmp*10 + (str[pointer+cnt]^48);
			pointer+= 8;
			s[i] = tmp;
		}
	}
	bigint operator + (bigint b){
		bigint c;
		if(s.size()<b.s.size())return b + *this;
		int num = 0;
		const int maxlen = s.size();
		for(int i = 0;i < maxlen;i ++){
			num += s[i];
			if(i<b.s.size())num += b.s[i];
			c.s.push_back(num%base);
			num/=base;
		}
		if(num)c.s.push_back(num);
		return c;
	}
};

int main() {
	bigint a,b;
	a.scan();
	b.scan();
	bigint c = a+b;
	c.puts();
	return 0;
}

2022/1/21 13:49
加载中...