一些数字比long long的上限更大,无法直接用数据类型存储,输入只能用string类型变量,这时计算就需要将数字载入数组。(注:long long上限为2的63次方减1)
1、高精度加法
void add(int a[],int b[],int c[])
{
int al = a[0],bl = b[0],cl = max(al,bl);
int t = 0;
for (int i = 1;i <= cl;i++)
{
if (i <= al) t += a[i];
if (i <= bl) t += b[i];
c[i] = t % 10;
t /= 10;
}
if (t > 0)
{
cl++;
c[cl] = t;
}
c[0] = cl;
}
2、高精度减法
void sub(int a[],int b[],int c[])
{
int al = a[0],bl = b[0],cl = a[0];
int t = 0;
for (int i = 1;i <= cl;i++)
{
t += a[i];
if (i <= bl) t -= b[i];
c[i] = (t+10) % 10;
if (t < 0) t = -1;
else t = 0;
}
while (cl > 1 && c[cl] == 0) cl--;
c[0] = cl;
}
3、大数由string类型转为int类型数组
void s2BIG(string s,int a[])
{
int len = s.size();
for (int i = 1;i <= len;i++)
{
a[i] = s[len-i] - '0';
}
a[0] = len;
}
4、大数输出
void printBIG(int a[])
{
for (int i = a[0];i >= 1;i--)
{
cout << a[i];
}
}
5、大数比较大小
bool cmpBIG(int a[],int b[])
{
if (a[0] != b[0]) return a[0] < b[0];
for (int i = a[0];i >= 1;i--)
{
if (a[i] != b[i]) return a[i] < b[i];
}
return false;
}