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;
}
上一题
下一题