zoukankan      html  css  js  c++  java
  • 【模板】大整数类 —— 持续更新

    名称:MBI(Misty's Big Int)

    已实现的功能

    运算:加法、乘法

    赋值方式:char*、int、MBI

    比较方式:已全

    位运算:无

    输入输出:请使用cin、cout

    Code

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #ifndef MAXLEN
    #define MAXLEN 666
    #endif
    using namespace std;
    struct MBI
    {
    	int s[MAXLEN], len;
    	MBI()
    	{
    		memset(s, 0, sizeof(s));
    		len = 0;
    	}
    	void Check0()
    	{
    		if(len == 0)
    		{
    			s[0] = 1;
    			len = 1;
    		}
    		return;
    	}
    	MBI operator= (const char *t)
    	{
    		len = strlen(t);
    		for(int i = 1; i <= len; i++)
    		{
    			s[len - i] = t[i - 1] - '0';
    		}
    		return *this;
    	}
    	MBI operator= (const int t)
    	{
    		char c[MAXLEN];
    		sprintf(c, "%d", t);
    		*this = c;
    		return *this;
    	}
    	MBI operator+ (const MBI t)
    	{
    		MBI c;
    		c.len = max(len, t.len) + 1;
    		for(int i = 0; i < c.len; i++)
    		{
    			c.s[i] += t.s[i] + s[i];
    			c.s[i + 1] += c.s[i] / 10;
    			c.s[i] %= 10;
    		}
    		while(!c.s[c.len-1]) c.len--;
    		return c;
    	}
    	MBI operator+ (int t)
    	{
    		MBI c;
    		c = t;
    		c = c + *this;
    		return *this;
    	}
    	MBI operator* (const MBI t)
    	{
    		MBI c;
    		c.len = len + t.len + 1;
    		for(int i = 0; i < t.len; i++)
    		{
    			for(int j = 0; j < len; j++)
    			{
    				c.s[i + j] += t.s[i] * s[j];
    				c.s[i + j + 1] += c.s[i + j] / 10;
    				c.s[i + j] %= 10;
    			}
    		}
    		while(!c.s[c.len - 1]) c.len--;
    		return c;
    	}
    	bool operator< (const MBI t)
    	{
    		if(len != t.len)
    		{
    			return len < t.len;
    		}
    		for(int i = len - 1; i >= 0; i--)
    		{
    			if(s[i] != t.s[i])
    			{
    				return s[i] < t.s[i];
    			}
    		}
    		return false;
    	}
    	bool operator> (MBI t)
    	{
    		return t < (*this);
    	}
    	bool operator<= (MBI t)
    	{
    		return !(t < (*this));
    	}
    	bool operator>= (MBI t)
    	{
    		return t <= (*this);
    	}
    	bool operator== (MBI t)
    	{
    		return (t <= (*this)) && ((*this) <= t);
    	}
    	bool operator!= (MBI t)
    	{
    		return (t < (*this)) || ((*this) < t);
    	}
    };
    istream &operator>> (istream &in, MBI &t)
    {
    	char c[MAXLEN];
    	scanf("%s", c);
    	t = c;
    	return in;
    }
    ostream &operator<< (ostream &out, MBI &t)
    {
    	t.Check0();
    	for(int i = 1; i <= t.len; i++)
    	{
    		printf("%d", t.s[t.len-i]);
    	}
    	return out;
    }
    int main()
    {
    
    }
    
  • 相关阅读:
    【BZOJ-4592】脑洞治疗仪 线段树
    【BZOJ-1369】Gem 树形DP
    【BZOJ-3696】化合物 树形DP + 母函数(什么鬼)
    【BZOJ-2435】道路修建 (树形DP?)DFS
    【BZOJ-4590】自动刷题机 二分 + 判定
    【BZOJ-4591】超能粒子炮·改 数论 + 组合数 + Lucas定理
    【BZOJ-1492】货币兑换Cash DP + 斜率优化 + CDQ分治
    【BZOJ-1324】Exca王者之剑 最小割
    【BZOJ-1017】魔兽地图DotR 树形DP + 背包
    【BZOJ-1131】Sta 树形DP
  • 原文地址:https://www.cnblogs.com/fox-nest/p/13892206.html
Copyright © 2011-2022 走看看