hdu1753大明A+B(高精度)
来源:互联网 发布:应用宝优化 编辑:程序博客网 时间:2024/06/10 07:41
大明A+B
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6924 Accepted Submission(s): 2442
Problem Description
话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做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
Author
linle
可以把小数分成左右两部分整数进行计算;
#include <iostream>#include <string>#include <cstring>using namespace std;const int MAXN = 500;int pre[MAXN],pos[MAXN],num1[MAXN],num2[MAXN],num3[MAXN],num4[MAXN];string str1,str2;void plus_(){ memset(pre,0,sizeof(pre)); memset(pos,0,sizeof(pos)); memset(num1,0,sizeof(num1)); memset(num2,0,sizeof(num2)); memset(num3,0,sizeof(num3)); memset(num4,0,sizeof(num4)); int po1 = str1.find("."); int po2 = str2.find("."); if(po1==-1) po1=str1.size(); if(po2==-1) po2=str2.size(); int p1=0,p2=0; for(int i=po1+1; i<str1.size(); i++) num1[++p1]=str1[i]-'0'; for(int i=po2+1; i<str2.size(); i++) num2[++p2]=str2[i]-'0'; for(int i=max(p1,p2); i>=0; i--){ pos[i] += num1[i]+num2[i]; if(pos[i]>=10){pos[i-1]+=pos[i]/10; pos[i]%=10;} } for(int i=po1-1,k=0; i>=0; i--) num3[k++]=str1[i]-'0'; for(int i=po2-1,k=0; i>=0; i--) num4[k++]=str2[i]-'0'; for(int i=0; i<max(po1,po2); i++){ pre[i]+=num3[i]+num4[i]; if(i==0 && pos[0]==1) {pre[i]+=1; pos[0]=0;} //pos[0]=0很重要,影响到后面的判断 if(pre[i]>=10) {pre[i+1]+=pre[i]/10; pre[i]%=10;} } int prel=MAXN,posl=MAXN; while(prel--){ if(pre[prel]!=0) break; } while(posl--){ if(pos[posl]!=0) break; } // cout<<prel<<" "<<posl<<endl; if(prel==-1 && posl==-1){ cout<<0; }else if(posl==-1){ while(prel!=-1) cout<<pre[prel--]; }else if(prel==-1){ cout<<"0."; for(int i=1; i<=posl; i++) cout<<pos[i]; }else{ while(prel!=-1) cout<<pre[prel--]; cout<<"."; for(int i=1; i<=posl; i++) cout<<pos[i]; } cout<<endl;}int main(){ while(cin>>str1>>str2) plus_(); return 0;}
0 0
- hdu1753大明A+B(高精度)
- hdu1753 大明A+B(高精度加法)
- 大明A+B hdu1753
- hdu1753----大明A+B
- hdu1753 大明A+B
- hdu1753大明A+B
- hdu1753 大明A+B
- hdu1753大明A+B
- hdu1753 大明A+B
- hdu1753 大明A+B
- HDU1753 大明A+B
- Hdu1753 大明A+B
- hdu1753 大明A+B (java大数练习第二弹 高精度小数)
- 大明A+B(hdu1753)大数,java
- hdu1753 大明A+B && nyoj 513 A+B Problem IV
- ACM-简单题之大明A+B——hdu1753
- HDU1753—大明A+B(大正小数相加)
- HDU1753 大明A+B(带小数的大数加法)
- Linux TCP 服务器编程(三):信号处理
- Matlab fread的问题:imwrite写single精度的大矩阵,结果不对
- Ubuntu上可使用的15个桌面环境
- 人生悖论:越有钱越焦虑
- vim配置文件
- hdu1753大明A+B(高精度)
- [JAVA学习] Day1: 决定学习Java
- Building the Nexus 7 kernel
- Mysql show命令
- CodeForces 377 B. Preparing for the Contest
- 总帐科目LSMW导入'/'的问题
- linux体系
- F-32后台配置添加筛选条件
- wxpython 之 GDI(一)