• 【模板】大整数类 —— 持续更新


    名称: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()
    {
    
    }
    
  • 相关阅读:
    继承---原型式继承
    CSS中可继承的属性
    函数定义相关
    现代密码学(对称密码——第一部分)
    数据结构练习题(1)
    数据结构与算法(线性表)
    数据结构与算法(绪论)
    大英四期中单词复习
    计算机组成原理_verilog学习_实验二答案(原创)
    现代密码学——第2章古典密码学
  • 原文地址:https://www.cnblogs.com/fox-nest/p/13892206.html
Copyright © 2020-2023  润新知