题目描述
求2个浮点数相加的和 题目中输入输出中出现浮点数都有如下的形式: P1P2…Pi.Q1Q2…Qj
对于整数部分,P1P2…Pi是一个非负整数 对于小数部分,Qj不等于0
输入描述:
对于每组案例,每组测试数据占2行,分别是两个加数。
输出描述:
每组案例是n行,每组测试数据有一行输出是相应的和。 输出保证一定是一个小数部分不为0的浮点数
样例
输入:0.111111111111111111111111111111
0.111111111111111111111111111111
输出:0.222222222222222222222222222222
代码
#include<iostream>
#include<string>
using namespace std;
int main() {
string s1, s2;
while(getline(cin, s1)) {
getline(cin, s2);
int pos1 = s1.find('.'); //寻找小数点所在位置
int pos2 = s2.find('.');
if(pos1 > pos2) s2.insert(0, pos1 - pos2, '0'); //整数部分高位补0
else s1.insert(0, pos2 - pos1, '0');
if(s1.length() > s2.length()) s2.insert(s2.length(), s1.length() - s2.length(), '0');
else s1.insert(s1.length(), s2.length() - s1.length(), '0'); //小数末尾补0
int res = 0; //进位
for(int i = s1.length() - 1; i >= 0; i--) {
if(s1[i] == '.') continue;
s1[i] = s1[i] - '0' + s2[i] - '0' + res;
res = s1[i] / 10;
s1[i] = s1[i] % 10 + '0';//更新
}
if(res == 1) s1.insert(0, 1, '1'); //判断最高位是否有进位
cout<<s1<<endl;
}
return 0;
}