锰锌求教,洛谷本地AC 没有用gets 用的是压位高精
查看原帖
锰锌求教,洛谷本地AC 没有用gets 用的是压位高精
230808
Zxsoul楼主2021/6/25 21:43

整个部分没有用到 gets 但是洛谷本地

in:
123
123
out:
123

求救

#include <set>
#include <cmath>
#include <queue>
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;

const int A = 1e7+10;
const int B = 1e6+10;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;

inline int read() {
  char c = getchar();
  int x = 0, f = 1;
  for ( ; !isdigit(c); c = getchar()) if (c == '-') f = -1;
  for ( ; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48);
  return x * f;
}
int n;
/*
	先比这敲一遍板子 压位高精 
*/
const int base=1e9;
struct Date
{
	ll a[400];
	Date(void) {for (int i=0;i<=400;i++) a[i]=0;}
	Date(ll x) 
	{
		for (int i=0;i<=400;i++) a[i]=0;
		a[0]=x;
	}
	Date operator +(const Date oth) const
	{
		Date res=*this;
		for (int i=0;i<400;i++)
		{
			res.a[i]+=oth.a[i];
			if (res.a[i]>=base) res.a[i]-=base, ++res.a[i+1]; 
		}
		return res;
	} 
	
	Date operator *(const int x) const 
	{
		Date res=*this;
		for (int i=0;i<400;i++) res.a[i]*=x;
		for (int i=0;i<400;i++)
		{
			res.a[i+1]+=res.a[i]/base;
			res.a[i]%=base;	
		}
		return res;
	}
	
	Date operator /(const int x) const
	{
		ll lst=0;
		Date res;
		for (int i=399;i>=0;i--)
		{
			lst=lst*base+a[i];
			res.a[i]=lst/x;
			lst=lst%x; 
		}
		return res;
	}   
	void print() const  
	{
		bool flag=0;
		for (int i=399;i>=0;i--)
		{
			if (flag) printf("%09lld\r",(ll)a[i]);
			else if (a[i]) printf("%lld\r",(ll)a[i]), flag=1; 
		} 
		if (!flag) printf("0");
//		putchar(c);
	}
	/*
		没有比较久自己写一个 
	*/
	bool operator <(const Date oth) const 
	{
		Date res=*this;
		for (int i=399;i>=0;i--)
		{
			if (res.a[i]<oth.a[i]) return true;
		} 
		return false;
	}
};
int main()
{
	int a, b;
	scanf("%d%d",&a,&b);
	Date beg(a);
	Date peg(b);
	beg=beg+peg;
	beg.print(); 
} 
2021/6/25 21:43
加载中...