#include<stdio.h>
#include<stdlib.h>
#include <string>
#include <iostream>
using namespace std;
int main()
{
int a1[1024], b1[1024], c[1024], t1, t2, t, i, k, n;
char a2[1024], b2[1024];// 这两个数组用来输入两个数
cin >> n;
while (n--) // n组测试;
{
int j1 = 0, j2 = 0; // 转化类型时候j1来当a1的下标,j2来当a2的下标;
cin >> a2;
cin >> b2;
t1 = strlen(a2); // 测出两个字符串的长度;
t2 = strlen(b2);
memset(c, 0, sizeof(c)); // 将三个整型数组中的所有元素清零;
memset(a1, 0, sizeof(a1));
memset(b1, 0, sizeof(b1));
for (i = t1 - 1; i >= 0; i--) // 将第一个字符串转化为整型数,保存在a1中;
{
a1[j1++] = a2[i] - '0';
}
for (i = t2 - 1; i >= 0; i--) //将第二个字符串转化为整型数,保存在a2中;
{
b1[j2++] = b2[i] - '0';
}
t = max(t1, t2);
for (i = 0; i < t; i++) //将两个数组的数进行加法运算;
{
c[i] = a1[i] + b1[i];
}
for (i = 0; i < t; i++)
{
if (c[i] >= 10) // 上面的运算数组中的数可能大于10;
{
c[i + 1] += c[i] / 10; // 取整进位;
c[i] = c[i] % 10; // 原位取余保存;
}
}
//运算结果可能会比输入的数位数多一位,所以下面要判断结果是否多出了一位;
if (c[t] == 0) // 判断下标为t的这一位就是看是否为多出一位,因为输入的数的最大长度为t。存储用到的最大下标为t - 1;如果该位为0,则没有多出一位;
{
for (i = t - 1; i >= 0; i--) // 从t - 1输出就行;
cout << c[i];
}
else // 如果该位不为0,则结果多了一位;
{
for (i = t; i >= 0; i--) // 从t输出。
cout << c[i];
}
cout << endl;
}
return 0;
}
大数加法
最新推荐文章于 2023-02-11 11:25:04 发布