[模板]重载运算符高精

高精度结构体
struct High
{
	int arr[100010] , len;
	High()
	{
		memset(a , 0 , sizeof a);
		len = 1;
	}
	High& operator = (int y)
	{
		len = 0;
		while(y)
		{
			a[++len] = y % 10;
			y /= 10;
		}
		return *this;
	}
};
  • 构造函数 High()len = 1 表示构造初始数为 0 而 非空
  • 重载 = 为将 int型 直接赋值给结构体
  • arr数组大小要根据题目分析开到足够大 , 在允许的情况下不要吝啬空间

重载乘法运算符
High operator * (const High &x , const int &y)
{
	High ret; 
	ret.len = x.len;
	for(int i = 1; i <= x.len; i++)
	{
		ret.a[i] = x.a[i] * y + ret.a[i - 1] / 10;
		ret.a[i - 1] %= 10;
	}
	while(ret.a[ret.len] > 10)
	{
		ret.a[ret.len + 1] = ret.a[ret.len] / 10 , ret.a[ret.len] %= 10;
		ret.len++;
	}
	return ret;
}

重载取整运算符
High operator / (const High &x , const int &y)
{
	High ret; int tmp = 0;
	ret.len = x.len;
	for(int i = x.len; i >= 1; i--)
	{
		tmp = tmp * 10 + x.a[i];
		ret.a[i] = tmp / y , tmp %= y;
	}
	while(!ret.a[ret.len])
		ret.len--;
	return ret;
}

重载max函数
High max(const High &x , const High &y)
{
	if(x.len > y.len) return x;
	if(x.len < y.len) return y;
	for(int i = x.len; i >= 1; i--)
	{
		if(x.a[i] > y.a[i]) return x;
		if(x.a[i] < y.a[i]) return y;
	}
	return x;
}
posted @ 2022-04-11 22:27  skyliyu  阅读(73)  评论(0编辑  收藏  举报