#include<stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int numberArr = 0;
scanf_s("%d", &numberArr);
char resArr[50][100];
for (int i = 0; i < numberArr; i++) {
char firstStr[100];
memset(firstStr, 0, 100);
char secendStr[100];
memset(secendStr, 0, 100);
char resStr[100];
memset(resStr, 0, 100);
char* buf;
scanf_s("%s", firstStr, 100);
scanf_s("%s", secendStr, 100);
char* str1f = strtok_s(firstStr, " ." ,&buf); //第一个数的整数部分
char* str1i = str1f;
if (str1f != NULL)
{
str1f = strtok_s(NULL, " .", &buf); //第一个数的小数部分
}
char* str2f = strtok_s(secendStr, " .", &buf); //第二个数的整数部分
char* str2i = str2f;
if (str2f != NULL)
{
str2f = strtok_s(NULL, " .", &buf); //第一个数的小数部分
}
int firstLen = strlen(str1f); //第一个数小数部分长度
int secendLen = strlen(str2f); //第二个数小数部分长度
int firstLenI = strlen(str1i); //第一个数小数部分长度
int secendLenI = strlen(str2i); //第二个数小数部分长度
if (firstLen > secendLen)
{
char resf[100];
char resi[100];
memset(resf, 0, 100);
memset(resi, 0, 100);
int carry = 0;
bool isLastE = true;
for (int j = (firstLen-1); j >= 0; j--)
{
if (j > (secendLen-1))
{
resf[j] = str1f[j];
}
else
{
//resf[j] = '0';
resf[j] = (char)(((int)str1f[j] + (int)str2f[j] + carry - 96) % 10) + 48;
carry = ((int)str1f[j] + (int)str2f[j] + carry - 96) / 10;
}
if (resf[j] != '0' && isLastE)
{
isLastE = false;
}
if (resf[j]=='0' && isLastE)
{
resf[j] = '\0';
}
}
int firstI = atoi(str1i);
int secendI = atoi(str2i);
sprintf_s(resi,"%d", (firstI + secendI+carry));
if (resf == NULL || resf[0] == '\0')
sprintf_s(resArr[i], 100, "%s", resi);
else
sprintf_s(resArr[i], 100, "%s.%s", resi, resf);
}
else
{
char resf[100];
char resi[100];
memset(resf, 0, 100);
memset(resi, 0, 100);
int carry = 0;
bool isLastE = true;
for (int j = (secendLen - 1); j >= 0; j--)
{
if (j > (firstLen - 1))
{
resf[j] = str1f[j];
}
else
{
//resf[j] = '0';
resf[j] = (char)(((int)str1f[j] + (int)str2f[j] + carry - 96) % 10) + 48;
carry = ((int)str1f[j] + (int)str2f[j] + carry - 96) / 10;
}
if (resf[j] != '0' && isLastE)
{
isLastE = false;
}
if (resf[j] == '0' && isLastE)
{
resf[j] = '\0';
}
}
int firstI = atoi(str1i);
int secendI = atoi(str2i);
sprintf_s(resi, "%d", (firstI + secendI + carry));
if (resf == NULL || resf[0] == '\0')
sprintf_s(resArr[i], 100, "%s", resi);
else
sprintf_s(resArr[i], 100, "%s.%s", resi, resf);
}
}
for (int i = 0; i < numberArr; i++)
{
printf("%s\n",resArr[i]);
}
return 0;
}