刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

实数加法
求两个实数相加的和。

题目中输入输出里出现的浮点数都有如下的形式: P1P2…Pi.Q1Q2…Qj。对于整数部分,P1P2…Pi是一个非负整数且当整数部分不为0时,P1不等于0;对于小数部分,Qj不等于0。
时间限制:1000
内存限制:65536
输入
2行,每行是一个加数。每个加数的长度不超过100。
输出
一行,即相应的和。输出保证一定是一个小数部分不为0的实数。
样例输入

0.111111111111111111111111111111
0.111111111111111111111111111111

样例输出

0.222222222222222222222222222222

使用微信搜索喵呜刷题,轻松应对考试!

答案:

include<iostream>

include<string>

include<algorithm>

using namespace std;

int main()

{

string a,b;

int j=0;

int m,n;

string ax,ay,bx,by;

cin>>a;

cin>>b;

int x=a.find(“.”);

int y=b.find(“.”);

ax=a.substr(0,x);

ay=a.substr(x+1);

bx=b.substr(0,y);

by=b.substr(y+1);//将整数小数分离开

if(ax.size()>bx.size())

m=ax.size();//找到最大位数

else

m=bx.size();

if(by.size()>ay.size())

n=by.size();

else

n=ay.size();

while(ax.size()!=m)

ax=“0”+ax;//整数部分补0(在前面补)

while(bx.size()!=m)

bx=“0”+bx;

while(ay.size()!=n)

ay+=“0”;//小数补0(在后面补)

while(by.size()!=n)

by+=“0”;

int k=0;

string zheng=““,xiao=””;

for(int i=n-1;i>=0;i–)//注意要倒序

{

xiao+=((k+(ay[i]-‘0’)+(by[i]-‘0’))%10+‘0’);//k起到进位的作用

k=(k+(ay[i]-‘0’)+(by[i]-‘0’))/10;//进几

}

for(int i=m-1;i>=0;i–)

{

zheng+=((k+(ax[i]-‘0’)+(bx[i]-‘0’))%10+‘0’);

k=(k+(ax[i]-‘0’)+(bx[i]-‘0’))/10;

}

if(k!=0)

zheng+=k+‘0’;

int c;

for (c=0;c<xiao.length();c++)

if (xiao[c] != ‘0’)

break;//去掉小数部分0

reverse(zheng.begin(), zheng.end());//将整数部分倒序

cout << zheng << “.”;

for (int i = xiao.length() - 1; i>=c; i–)//也可以用reverse

cout << xiao[i];

cout << endl;

}

解析:

【喵呜刷题小喵解析】:这是一个涉及浮点数加法的问题。对于两个实数相加,整数部分和小数部分需要分开处理。首先,我们需要将输入的字符串形式的实数分割成整数部分和小数部分。然后,我们需要对整数部分和小数部分进行对齐,即在小数点后的位数少的数前面补0,使其与位数多的数对齐。接着,我们需要对整数部分和小数部分进行相加。对于小数部分,由于每一位上的数字相加可能会产生进位,我们需要记录进位值,并在下一位相加时加上。最后,我们需要将相加后的结果输出。整数部分和小数部分需要倒序输出,因为我们是从低位开始相加的。在输出小数部分时,我们需要去掉前导的0。注意,这个答案中使用了字符串来处理实数,这样可以避免浮点数精度问题。同时,由于题目要求输出的小数部分不为0,所以在输出小数部分时,我们只需要输出从非0位开始到小数点后的所有位。
创作类型:
原创

本文链接:实数加法 求两个实数相加的和。 题目中输入输出里出现的浮点数都有如下的形式: P1P2…Pi.Q1Q

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share