题目描述
求2个浮点数相加的和 题目中输入输出中出现浮点数都有如下的形式: P1P2…Pi.Q1Q2…Qj 对于整数部分,P1P2…Pi是一个非负整数 对于小数部分,Qj不等于0
输入描述:
对于每组案例,每组测试数据占2行,分别是两个加数。
输出描述:
每组案例是n行,每组测试数据有一行输出是相应的和。
输出保证一定是一个小数部分不为0的浮点数
示例1
输入
0.111111111111111111111111111111
0.111111111111111111111111111111
输出
0.222222222222222222222222222222
代码:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
string a,b;
void turn(string s,vector<int> &m,vector<int> &k){
int i=0;
while(s[i]!='.')
{
k.push_back(s[i]-'0');
i++;
}
i++;
for(i;i<s.size();i++){
m.push_back(s[i]-'0');
}
}
vector<int> add_dicimal(vector<int>&a,vector<int>&b,bool &flag){
int len=max(a.size(),b.size());
vector<int> ans(len,0);
int t=0;
for(int i=len-1;i>=0;i--){
if(i<a.size())
t+=a[i];
if(i<b.size())
t+=b[i];
ans[i]=t%10;
if(t>=10)
t=1;
else
t=0;
}
if(t!=0)
flag=true;
return ans;
}
vector<int> add(vector<int> &a,vector<int>&b,bool &flag){
vector<int> res;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int i=0;
int t=flag;
while(t||i<a.size()||i<b.size()){
if(i<a.size())
t+=a[i];
if(i<b.size())
t+=b[i];
res.push_back(t%10);
if(t>=10)
t=1;
else
t=0;
i++;
}
reverse(res.begin(),res.end());
return res;
}
int main(){
while(cin >> a >> b){
vector<int> p1,p2,ans,num1,num2,integer;
bool flag=false;
turn(a,p1,num1);
turn(b,p2,num2);
ans=add_dicimal(p1,p2,flag);
integer=add(num1,num2,flag);
for(int i=0;i<integer.size();i++)
printf("%d",integer[i]);
printf(".");
for(int i=0;i<ans.size();i++)
printf("%d",ans[i]);
printf("\n");
}
return 0;
}