#include<stdio.h>
#include<string.h>
char input[2][1000];
int n;
char point1[1000], point2[1000];
char int1[1000], int2[1000];
int pointAns[1000];
int intAns[1000];
bool pointCarry;
int fooPoint(char *a, char *b) {
char temp[1000];
int length_a = strlen(a);
int length_b = strlen(b);
if(length_b > length_a) {
strcpy(temp, b);
strcpy(b, a);
strcpy(a, temp);
length_a = strlen(a);
length_b = strlen(b);
}
for(int i = 0 ; i < length_b ; i ++) {
pointAns[i] = (b[i] - '0') + (a[i] - '0');
}
for(int i = length_b ; i < length_a ; i ++) {
pointAns[i] = a[i] - '0';
}
for(int i = length_a - 1 ; i >= 1 ; i --) {
if(pointAns[i] > 9) {
pointAns[i] -= 10;
pointAns[i - 1] ++;
}
}
if(pointAns[0] > 9) {
pointCarry = true;
pointAns[0] -= 10;
}
return length_a;
}
int fooInt(char *a, char *b) {
char temp[1000];
int length_a = strlen(a);
int length_b = strlen(b);
strrev(a);
strrev(b);
if(length_b > length_a) {
strcpy(temp, b);
strcpy(b, a);
strcpy(a, temp);
length_a = strlen(a);
length_b = strlen(b);
}
for(int i = 0 ; i < length_b ; i ++) {
intAns[i] = (b[i] - '0') + (a[i] - '0');
}
for(int i = length_b ; i < length_a ; i ++) {
intAns[i] = a[i] - '0';
}
if(pointCarry) {
intAns[0] ++;
}
for(int i = 0 ; i < length_a - 1 ; i ++) {
if(intAns[i] > 9) {
intAns[i] -= 10;
intAns[i + 1] ++;
}
}
if(intAns[length_a - 1] > 9) {
if(length_a - 1 == 0) {
}
else if(intAns[length_a - 1] == 10) intAns[length_a - 1] = 10;
else intAns[length_a - 1] = (intAns[length_a - 1] % 10) * 10 + intAns[length_a - 1] / 10;
}
return length_a;
}
int main() {
while(~scanf("%d", &n)) {
while(n --) {
pointCarry = false;
scanf("%s", input[0]);
scanf("%s", input[1]);
sscanf(input[0], "%[0-9].%[0-9]", int1, point1);
sscanf(input[1], "%[0-9].%[0-9]", int2, point2);
int la = fooPoint(point1, point2);
int lb = fooInt(int1, int2);
for(int i = la - 1 ; i >= 0 ; i --) {
if(pointAns[i] == 0) {
la --;
}else {
break;
}
}
for(int i = lb - 1 ; i >= 0 ; i --) {
printf("%d", intAns[i]);
}
if(la != 0)
printf(".");
for(int i = 0 ; i < la ; i ++) {
printf("%d", pointAns[i]);
}
printf("\n");
}
}
return 0;
}
9111 浮點數加法
Time Limit:1000MS Memory Limit:65536K
Total Submit:259 Accepted:0
Description
求2個浮點數相加的和。
題目中輸入輸出中出現浮點數都有如下的形式:
P1P2...Pi.Q1Q2...Qj
對於整數部分,P1P2...Pi是一個非負整數
對於小數部分,Qj不等於0
Input
第1行是測試數據的組數n,每組測試數據佔2行,分別是兩個加數。每組測試數據之間有一個空行,每行數據不超過100個字符。
Output
n行,每組測試數據有一行輸出是相應的和。輸出保證一定是一個小數部分不爲0的浮點數。
Sample Input
10
0.111111111111111111111111111111
0.111111111111111111111111111111
10000000.655555555555555555555555555555
1.444444444444444444444444444445
0.11111111111111111
0.111111111111111111111111111111
10000000.655555555555555555555555555555
1.4444444444445
0.11111111111111111111111111999999999999991111
0.1111119999999999999111111111111111111111111
10000000.65555555555999999999999995555555555555555555
999999999991.444444444444444444444444444445
909999999999.111111111111111111111111111111
0.111111111111111111111111111111
10000000.65555555555999999999995555555555555555555
1.444444444444444444444444444445
0.111111111111111111111111111111
0.11111111111111111111119999999911111111
10000000.655555555555555555555555555555
999999999999999999991.444444444444444444444444444445
Sample Output
0.222222222222222222222222222222
10000002.1
0.222222222222222221111111111111
10000002.100000000000055555555555555555
0.22222311111111111102222223111111111111102221
1000009999992.10000000000444444444444440000055555555555555
909999999999.222222222222222222222222222222
10000002.10000000000444444444440000000055555555555
0.22222222222222222222231111111011111111
1000000000000009999992.1