Description
求a+b的值
Input
第一行一个整数T,表示接下来有T行
每行两个整数是a,b,(0<=a,b<=10^10000)
Output
输出值
#include <stdio.h>
#include <string.h>
char s1[10100];
char s2[10100];
int a[10100];
int b[10100];
int main()
{
int pp;scanf("%d",&pp);
while (pp--)
{
scanf("%s%s",s1,s2);
int l1 = strlen(s1);
int l2 = strlen(s2);
int len;
if (l1 > l2) //比较字符串的长度来进行加法
len = l1;
else
len = l2;
//for (int i = 0 ; i <= len ; i++)
//a[i] = b[i] = 0;
memset(a,0,sizeof(a));//要将数组a,b清零
memset(b,0,sizeof(b));
for (int i = l1 - 1 ; i >= 0 ; i--)
a[l1 - i - 1] = s1[i] - '0';
for (int i = l2 - 1 ; i >= 0 ; i--)
b[l2 - i - 1] = s2[i] - '0';
for (int i = 0 ; i < len ; i++)
{
a[i] = a[i] + b[i];
a[i+1]+= a[i] / 10;
a[i] = a[i] % 10;
}
if (a[len] != 0) len++;//若位数增加,那么字符串的长度增加。
for (int i = len - 1 ;i >= 0 ;i--)
printf("%d",a[i]);
printf("\n");
}
return 0;
}
高精度加法计算:
1、因为是高精度,所以数字很大,要用字符串进行储存。
2、要进行计算,一般是从末尾进行的,所以要在字符串转化为整型数组的同时,要将顺序改变。
3、加法会有进位,所以利用每次前一为加10,后一位取余的规律进行计算。
4、最后输出的时候要记得倒过来输出。
注意点:
1、利用头文件#<string.h>测量字符串的长度以确定位数
2、要对a,b数组清零,以便进位。
3、最高位要进一时,字符串的长度要增加。