大数运算
大数的存储,用字符串存储后,要将其转化为整形
加法
#include<stdio.h>
#include<string.h>
int main()
{
int n;
scanf("%d", &n);
while (n--)
{
char a[2000], b[2000];
scanf("%s %s", &a, &b);
int c = strlen(a), d = strlen(b);
int max;
if (c > d) max = c;
else max = d;//找到计算时的总位数
int x[2000] = { 0 }, y[2000] = { 0 };
for (int i = 0; i < c; i++)
{
x[c - 1 - i] = a[i] - 48;
}//将a字符串转换为整形数组,并将数组逆序
for (int i = 0; i < d; i++)
{
y[d - 1 - i] = b[i] - 48;
}//将b字符串转换为整形数组,并将数组逆序
for (int i = 0; i < max; i++)
{
x[i] = x[i] + y[i];
x[i + 1] = x[i + 1] + x[i] / 10;//满10进1
x[i] = x[i] % 10;//当前位数的值
}//对每一位进行计算
if (c == 1 && d == 1 && x[0] == 0 && y[0] == 0)
{
printf("0\n");
continue;
}//0+0的特殊情况单独摘出来写
int gg = 0;//为了舍弃前置0,开始时0不输出,当第一次遇见不为0的数字时,转换标记,开始输出
for (int i = max + 1; i >= 0; i--)
{
if (x[i] != 0) gg = 1;
if (gg == 1)
{
printf("%d", x[i]);
}
}
printf("\n");
}
return 0;
}