- 题目描述:
-
求2个浮点数相加的和
题目中输入输出中出现浮点数都有如下的形式:
P1P2...Pi.Q1Q2...Qj
对于整数部分,P1P2...Pi是一个非负整数
对于小数部分,Qj不等于0
- 输入:
-
对于每组案例,第1行是测试数据的组数n,每组测试数据占2行,分别是两个加数。
每组测试数据之间有一个空行,每行数据不超过100个字符
- 输出:
-
每组案例是n行,每组测试数据有一行输出是相应的和。
输出保证一定是一个小数部分不为0的浮点数
- 样例输入:
-
2 0.111111111111111111111111111111 0.111111111111111111111111111111 10000000.655555555555555555555555555555 1.444444444444444444444444444445
- 样例输出:
-
0.222222222222222222222222222222 10000002.1
思路:
容易犯细节错误,此题我WA了好几次。
代码:
#include <stdio.h> #include <string.h> char s1[110], s2[110], s[110]; int Find(char a[], int n) { int i; for (i = 0; a[i]; i++) { if (a[i] == '.') { return i; } } return -1; } int main() { int ca; scanf("%d", &ca); while (ca--) { scanf("%s%s", s1, s2); int n1 = strlen(s1); int n2 = strlen(s2); int pos1 = 0, pos2 = 0; pos1 = Find(s1, n1); pos2 = Find(s2, n2); int i = n1, j = n2; int d = (n1 - pos1) - (n2 - pos2); if (d > 0) { for (; j < n2 + d; j++) { s2[j] = '0'; } s2[j] = ' '; n2 = j; } else if (d < 0) { for (; i < n1 - d; i++) { s1[i] = '0'; } s1[i] = ' '; n1 = i; } i--; j--; int t = 0, len = 0; while (i >= 0 && j >= 0) { if(s1[i] == '.') { s[len] = '.'; } else { t += s1[i] + s2[j] - 2 * '0'; s[len] = t % 10 + '0'; t /= 10; } len++; i--; j--; } while (i >= 0) { t += s1[i--] - '0'; s[len++] = t % 10 + '0'; t /= 10; } while (j >= 0) { t += s2[j--] - '0'; s[len++] = t % 10 + '0'; t /= 10; } if (t == 1) { s[len++] = '1'; } j = 0; while (s[j] == '0') { j++; } for (i = len - 1; i >= j; i--) { printf("%c", s[i]); } printf(" "); } return 0; } /************************************************************** Problem: 1137 User: liangrx06 Language: C Result: Accepted Time:150 ms Memory:912 kb ****************************************************************/