测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A38321. 实数加法求两个实数相加的和。题目中输入输出里出现的浮点数都有如下的形式: P1 P2 ... Pi.Q1 Q2 ...Q j。对于整数部分, P1 P2 ...P i 是一个非负整数且当整数部分不为 0 时,P1 不等于 0; 对于小数部分, Qj 不等于 0。输入2 行, 每行是一个加数。 每个加数的长度不超过 100。输出一行, 即相应的和。 输出保证一定是一个小数部分不为 0 的实数。样例…

填空题 较易

题目描述

实数加法

求两个实数相加的和。

题目中输入输出里出现的浮点数都有如下的形式: P1  P2  ... Pi.Q1 Q2 ...Q j。

对于整数部分, P1 P2 ...P i 是一个非负整数且当整数部分不为 0 时,P1 不等于 0;

对于小数部分, Qj 不等于 0。

输入

2 行, 每行是一个加数。 每个加数的长度不超过 100。

输出

一行, 即相应的和。 输出保证一定是一个小数部分不为 0 的实数。

样例输入

0.111111111111111111111111111111
0.111111111111111111111111111111

样例输出

0.222222222222222222222222222222

参考答案

#include"stdio.h" #include<iostream> #include<string> #include<algorithm>//为了用reverse函数 using namespace std; typedef long long ll; string a,b,c; int main() { //freopen("c://jin.txt","r",stdin); while(cin>>a>>b) { int dota=a.find('.'); //string的find函数,返回查找字符串的位置 int dotb=b.find('.'); int lena=a.length()-dota; int lenb=b.length()-dotb; int len=lena-lenb; string tmp(abs(len),'0'); //string的一种构造函数 if(len>0)b+=tmp; else a+=tmp; reverse(a.begin(),a.end()); reverse(b.begin(),b.end()); len=dota-dotb; string tmp2(abs(len),'0'); if(len>0)b+=tmp2; else a+=tmp2; int k=0; for (int i=0;i<a.length();i++) { if(a[i]=='.')c+='.'; //特别注意这里不能用c[i],否则会报错 else { k=a[i]+b[i]-2*'0'+k; c+=char(k%10+'0'); k=k/10; } } if(k) { c+=char(k+'0'); } while(c[0]=='0')c.erase(c.begin()); if(c[0]=='.')c.erase(c.begin()); reverse(c.begin(),c.end()); cout<<c<<endl; } return 0; }
上一题 下一题