ZJUT1291(浮点A+B)
来源:互联网 发布:二手房数据 编辑:程序博客网 时间:2024/05/16 05:23
浮点A+B
Time Limit:1000MS Memory Limit:32768K
Description:
小红在数学方面很有天赋,虽然还只有一年级,其他同学还只能计算十以内的加减,可她却能够进行小数的加减了。现在,给你两个小数A和B,你的任务是代表小红计算出A+B的值。Input:
本题目包含多组测试数据,每组测试数据包含正小数A和B。小数长度不超过100。Output:
请在一行里面输出输出A+B的值,注意小数尾部不能留有多余的0。Sample Input:
1.1 2.91.1111 2.34441 1.11 2
Sample Output:
43.45552.13这道题简单来说就是多位数的加法,关于多位数的加法操作,方法就是模拟,即按照我们做竖式的方法来做。本题我的做法是将浮点数分别拆开成整数部分和小数部分,两个部分都可以作为多位数的加法分别相加,最后将整数部分和小数部分再进行一个合并就可以。要注意的地方有两点:第一点是小数部分最后的进位,要加到整数部分去;第二点是千万不要忘了题目提醒的去掉尾部的零。代码如下:#include<iostream>#include<iomanip>#include<vector>#include<algorithm>#include<map>#include<string>using namespace std;string bigIntAdd(string a,string b){string sum,tmp;int carry = 0;if(a.size() > b.size()){swap(a,b);}sum = string(b.size(),'0');a = string(b.size() - a.size(),'0') + a;for(int i = b.size() - 1 ; i >= 0 ; i--){sum[i] = (carry + (b[i] - 48) + (a[i] - 48))%10 + 48;carry = (carry + (b[i] - 48) + (a[i] - 48))/10;}if(carry != 0){tmp += carry + 48;sum = tmp + sum;}return sum;}string bigDecimelAdd(string &a , string &b){string sum,tmp;int carry = 0;if(a.size() > b.size()){swap(a,b);}sum = string(b.size(),'0');a = a + string(b.size() - a.size(),'0');for(int i = b.size() - 1 ; i >= 0 ; i--){sum[i] = (carry + (b[i] - 48) + (a[i] - 48))%10 + 48;carry = (carry + (b[i] - 48) + (a[i] - 48))/10;}a = sum ;if(carry != 0){return "1";}elsereturn "0";}int main(){string s1,s2,aInt,bInt,aDec,bDec,carry,sumInt,sumDec;while(cin>>s1>>s2){if(s1.find(".") == string::npos){aInt = s1;aDec = "0";}else{aInt = s1.substr(0,s1.find("."));aDec = s1.substr(s1.find(".")+1);}if(s2.find(".") == string::npos){bInt = s2;bDec = "0";}else{bInt = s2.substr(0,s2.find("."));bDec = s2.substr(s2.find(".")+1);}sumInt = bigIntAdd(aInt,bInt);carry = bigDecimelAdd(aDec,bDec);sumDec = bigIntAdd(sumInt,carry);while(!aDec.empty() &&aDec[aDec.size()-1] == '0'){aDec = aDec.substr(0,aDec.size()-1);}if(aDec.empty())cout<<sumDec<<endl;elsecout<<sumDec<<"."<<aDec<<endl;}return 0;}
0 0
- ZJUT1291(浮点A+B)
- 浮点数高精度相加(杭电1753A+B)
- HDU 1753 大明A+B(高精度浮点数运算)
- HDOJ-1753 大明A+B (浮点大数)
- 有两个浮点数a,b,计算a/b,要求保留小数点后面n 位(我写出小数点只能保存9~15位有效位数)
- a+b(整数)
- nvl(A,B)
- A/B(数论)
- A+B(1003)
- a+b(3)
- a+b(高精度)
- A-B(水)
- A + B (python)
- A/B(HDU1576)
- HDU1229(A+B)
- Jquery之表单过滤器之$("a b")--$("a>b")--$("a+b")--$("a~b")--(十六)
- a>b?a:b
- pat(B)1016. 部分A+B
- Unity里Inspector面板自定义学习——Custom Data,序列化一个类,自定义 property drawer
- 基于Eclipse的Hadoop应用开发环境配置
- Boost学习笔记(四)---利用boost::property_tree;读写xml文件,保存文件
- c#控制台substring学习心得
- 算法时间复杂度-常数阶
- ZJUT1291(浮点A+B)
- MapReduce中实现对HBase中表的操作二
- Java面向对象——IO流 总结应用(打印流)
- quartz任务并行
- 操作格子 线段树
- 异或运算的一些知识
- CMemDC代码解
- 编译luamongo
- hdu 4358 Boring counting 线段树离线操作