高精度结构体
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;
}