大明A+B
来源:互联网 发布:mac上好用的编程软件 编辑:程序博客网 时间:2024/06/08 04:45
E - 大明A+B
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64uDescription
话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。
现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。
现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
Input
本题目包含多组测试数据,请处理到文件结束。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
Output
请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
Sample Input
1.1 2.91.1111111111 2.34443233431 1.1
Sample Output
43.45554344542.1思路:这个题昨天中午就在思考,隔了几个小时,写的差不多了,就是当时不知道后导零怎么去掉了,然后和学弟一个在交流,灵感油然而生,是从后面判断,是0的话,continue,记一下不为0的位置,然后按要求输出即可。主要思想:我就是把两个数小数点对齐控制,左边的相加,右边的对应相加(位数不同的用0补充,使得左边的位数相同,右面的位数相同。然后右边的先相加,放到result1数组里面,result1控制一下比右边的数长度多1,result1[0]存放进位,result2数组存放左边的数相加的结果,result2[0]存放进位。#include<iostream>#include<stdio.h>#include<string.h>#include<string>#include<algorithm>using namespace std;int main(){string a,b; int result1[500],result2[500];int posa,posb,rgta,lfta,rgtb,lftb,i,k,l,pos,j,flg;while(cin>>a>>b){pos=0;flg=0;memset(result1,0,sizeof(result1));memset(result2,0,sizeof(result2));if(a.find(".")==-1){ posa=a.size();a=a+".";}else posa=a.find("."); if(b.find(".")==-1) { posb=b.size(); b=b+"."; //123456789. } else posb=b.find(".");// 23498.78998 rgta=a.size()-posa-1; rgtb=b.size()-posb-1; lfta=posa; lftb=posb; if(rgta>rgtb) { for(i=1;i<=rgta-rgtb;i++) b=b+"0"; rgtb=rgta; } else if(rgta<rgtb) { for(i=1;i<=rgtb-rgta;i++) a=a+"0"; rgta=rgtb; } if(lfta>lftb) { for(i=1;i<=lfta-lftb;i++) //b.insert(0,'0'); b='0'+b; lftb=lfta; posb=posa; } else if(lfta<lftb) { for(i=1;i<=lftb-lfta;i++) //a.insert(0,'0'); a='0'+a; lfta=lftb; posa=posb; } k=rgta; for(i=a.size()-1;i>posa;i--) { result1[k]=(a[i]-'0')+(b[i]-'0'); k--; } for(i=rgta;i>=1;i--) { result1[i-1]=result1[i-1]+result1[i]/10; result1[i]=result1[i]%10; } k=lfta; for(i=lfta-1;i>=0;i--) { result2[k]=(a[i]-'0')+(b[i]-'0');k--; } for(i=lfta;i>=1;i--) { result2[i-1]=result2[i-1]+result2[i]/10; result2[i]=result2[i]%10; } if(result1[0]!=0) { result2[lfta]+=result1[0]; if(result2[lfta]>=10) { for(i=lfta;i>=1;i--) { result2[i-1]=result2[i-1]+result2[i]/10; result2[i]=result2[i]%10; if(result2[i-1]<10) break; } } } int l=0; if(result2[0]==0) { for(i=1;i<=lfta;i++) cout<<result2[i]; for(i=rgta;i>=1;i--) { if(result1[i]==0) continue; else { flg=1; pos=i; break; } } if(flg) cout<<"."; for(i=1;i<=pos;i++) cout<<result1[i]; cout<<endl; } else { for(i=0;i<=lfta;i++) cout<<result2[i]; for(i=rgta;i>=1;i--) { if(result1[i]==0) continue; else { flg=1; pos=i; break; } } if(flg) cout<<"."; for(i=1;i<=pos;i++) cout<<result1[i]; cout<<endl; }}return 0;}
0 0
- 大明A+B hdu1753
- hdu1753----大明A+B
- hdu1753 大明A+B
- hdu1753大明A+B
- 大明A+B
- hdu1753 大明A+B
- hdu1753大明A+B
- HDU_1753大明A+B
- 大明A+B
- 大明A+B
- HDU 大明A+B
- 1573 大明A+B
- 大明A+B
- hdoj1753大明A+B
- 大明A+B
- 大明A+B
- 大明A+B
- hdu1753 大明A+B
- java 开发内存不足的问题——gc overhead limit exceeded eclipse
- TP 纯sql写法
- C++调用Demo程序API
- 【译】Unity3D Shader 新手教程(3/6) —— 更加真实的积雪
- 大圣画廊v0.4.0(7.18)
- 大明A+B
- SublimeREPL 插件安装
- 该 ISAM 不支持在链接表中删除数据。
- 【译】Unity3D Shader 新手教程(4/6) —— 卡通shader(入门版)
- IOS核心动画高级技巧
- hdu 1102 Constructing Roads
- 深入 理解 Statement 和 PreparedStatement
- Tempter of the Bone(HDU 1010)---15.7.20
- Android获取友盟统计渠道名称