2738:实数加法
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
求两个实数相加的和。
题目中输入输出里出现的浮点数都有如下的形式:
P1P2...Pi.Q1Q2...Qj。对于整数部分,P1P2...Pi是一个非负整数且当整数部分不为0时,P1不等于0;对于小数部分,Qj不等于0。
输入
- 2行,每行是一个加数。每个加数的长度不超过100。 输出
- 一行,即相应的和。输出保证一定是一个小数部分不为0的实数。 样例输入
-
0.111111111111111111111111111111 0.111111111111111111111111111111
样例输出
-
0.222222222222222222222222222222
- 查看
- 提交
- 统计
- 提示
- 提问
-
- 代码:
#include<cstdio> #include<cstring> const int LEN = 100; char num1[LEN + 10],num2[LEN + 10]; int aint[LEN],aflo[LEN],int1[LEN],int2[LEN],flo1[LEN],flo2[LEN]; int main() { scanf("%s",num1); scanf("%s",num2); int len1 = strlen(num1),len2 = strlen(num2),pos1,pos2,id1 = 0,id2 = 0; pos1 = strchr(num1,'.') - num1, pos2 = strchr(num2,'.') - num2; for(int i = pos1 + 1; i < len1; i++){ flo1[id1++] = num1[i] - '0'; } for(int i = pos2 + 1; i < len2; i++){ flo2[id2++] = num2[i] - '0'; } id1 = id1 > id2 ? id1 - 1 : id2 - 1; for(int i = id1; i > 0; i--){ aflo[i] += flo1[i] + flo2[i]; if(aflo[i] >= 10){ aflo[i] -= 10; aflo[i - 1]++; } } aflo[0] += flo1[0] + flo2[0]; if(aflo[0] >= 10){ aflo[0] -= 10; aint[0] ++; } id1 = id2 = 0; for(int i = pos1 - 1; i >= 0; i--){ int1[id1++] = num1[i] - '0'; } for(int i = pos2 - 1; i >= 0; i--){ int2[id2++] = num2[i] - '0'; } id1 = id1 > id2 ? id1 : id2; for(int i = 0; i < id1; i++){ aint[i] += int1[i] + int2[i]; if(aint[i] >= 10){ aint[i]-= 10; aint[i+1]++; } } for(id2 = id1; aint[id2] == 0 && id2 >= 0;id2--); for(int i = id2; i >= 0; i--) printf("%d",aint[i]); if(id2 < 0) putchar('0'); putchar('.'); for(id1 = LEN - 1; aflo[id1] == 0 && id1 >= 0;id1--); for(int i = 0; i <= id1; i++) printf("%d",aflo[i]); putchar('\n'); return 0; }