#include <stdio.h>
#include <string.h>
#define MAX 1010
struct flt{
int p[MAX]; // 整数部分
int q[MAX]; // 小数部分
int p_size;
int q_size;
void init(){
for(int i = 0; i < MAX; i ++){
p[i] = 0;
q[i] = 0;
}
p_size = 0;
q_size = 0;
}
flt operator + (const flt &a) const{
flt ret;
ret.init();
int qlen = q_size > a.q_size ? q_size : a.q_size;
int carry = 0;
ret.q_size = qlen;
for(int i = qlen - 1; i >= 0; i --){ // 小数部分先相加
int tmp = q[i] + a.q[i] + carry;
ret.q[-- qlen] = tmp % 10;
carry = tmp / 10;
}
int plen = p_size > a.p_size ? p_size : a.p_size;
for(int j = 0; j < plen; j ++){ // 整数部分相加
int tmp = p[j] + a.p[j] + carry;
ret.p[ret.p_size ++] = tmp % 10;
carry = tmp / 10;
}
if(carry != 0)
ret.p[ret.p_size ++] = carry;
return ret;
}
void output(){
int i = p_size - 1;
while(p[i] == 0 && i > -1) i --; // 去除结果前多余的0
if(i == -1){
printf("0");
}else{
while(i > -1){
printf("%d",p[i --]);
}
}
int j = q_size - 1;
while(q[j] == 0 && j > -1) j --; // 去除结果后面多余的0
if(j != -1){
printf(".");
int k = 0;
while(k < j + 1)
printf("%d",q[k ++]);
}
printf("\n");
}
};
flt change(char s[]){
flt tmp;
tmp.init();
int p;
for(p = 0; s[p] != '.'; p ++) ; // 查找.的位置
int len = strlen(s);
for(int i = p + 1; i < len; i ++) //小数,正着放,.12345,放入后是.12345
tmp.q[tmp.q_size ++] = s[i] - '0';
for(int j = p - 1; j >= 0; j --) //整数,反着放,12345.放入后是54321.
tmp.p[tmp.p_size ++] = s[j] - '0';
return tmp;
}
int main(){
int n;
while(~scanf("%d",&n)){
while(n --){
char str1[MAX],str2[MAX];
scanf("%s%s",str1,str2);
flt a,b,c;
a.init(); b.init(); c.init();
a = change(str1);
b = change(str2);
c = a + b;
c.output();
}
}
return 0;
}
#include <string.h>
#define MAX 1010
struct flt{
int p[MAX]; // 整数部分
int q[MAX]; // 小数部分
int p_size;
int q_size;
void init(){
for(int i = 0; i < MAX; i ++){
p[i] = 0;
q[i] = 0;
}
p_size = 0;
q_size = 0;
}
flt operator + (const flt &a) const{
flt ret;
ret.init();
int qlen = q_size > a.q_size ? q_size : a.q_size;
int carry = 0;
ret.q_size = qlen;
for(int i = qlen - 1; i >= 0; i --){ // 小数部分先相加
int tmp = q[i] + a.q[i] + carry;
ret.q[-- qlen] = tmp % 10;
carry = tmp / 10;
}
int plen = p_size > a.p_size ? p_size : a.p_size;
for(int j = 0; j < plen; j ++){ // 整数部分相加
int tmp = p[j] + a.p[j] + carry;
ret.p[ret.p_size ++] = tmp % 10;
carry = tmp / 10;
}
if(carry != 0)
ret.p[ret.p_size ++] = carry;
return ret;
}
void output(){
int i = p_size - 1;
while(p[i] == 0 && i > -1) i --; // 去除结果前多余的0
if(i == -1){
printf("0");
}else{
while(i > -1){
printf("%d",p[i --]);
}
}
int j = q_size - 1;
while(q[j] == 0 && j > -1) j --; // 去除结果后面多余的0
if(j != -1){
printf(".");
int k = 0;
while(k < j + 1)
printf("%d",q[k ++]);
}
printf("\n");
}
};
flt change(char s[]){
flt tmp;
tmp.init();
int p;
for(p = 0; s[p] != '.'; p ++) ; // 查找.的位置
int len = strlen(s);
for(int i = p + 1; i < len; i ++) //小数,正着放,.12345,放入后是.12345
tmp.q[tmp.q_size ++] = s[i] - '0';
for(int j = p - 1; j >= 0; j --) //整数,反着放,12345.放入后是54321.
tmp.p[tmp.p_size ++] = s[j] - '0';
return tmp;
}
int main(){
int n;
while(~scanf("%d",&n)){
while(n --){
char str1[MAX],str2[MAX];
scanf("%s%s",str1,str2);
flt a,b,c;
a.init(); b.init(); c.init();
a = change(str1);
b = change(str2);
c = a + b;
c.output();
}
}
return 0;
}