HDU 1753 大明A+B (大正小数加法、字符串处理)
大明A+B
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 16711 Accepted Submission(s): 6202
Problem Description
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。
现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
Input
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
Output
Sample Input
1.1 2.9
1.1111111111 2.3444323343
1.1
Sample Output
3.4555434454
2.1
题目分析
带小数的大数加法,我们只需要将整数部分和小数部分分别相加 然后处理进位即可
但是需要注意的是:
- 小数的加法与整数略有不同,它是左对齐的,短的需要在右边补零
- 要注意输出的时候多余的0和小数点要舍弃
- 输入的时候有可能存在 .123的情况 也就是整数部分为0,但是没有直接写出来的情况
代码
#include<bits/stdc++.h> using namespace std; string a,b;
int i,ia,ib; string bigadd(string a,string b)
{
int jin=,i;
char ai,bi;
string anss;
int lena=a.size();
int lenb=b.size();
if(lena>lenb)
anss=a;
else
anss=b;
int lenmax=max(lena,lenb);
int p=lena-;
int q=lenb-;
for(i=lenmax-;i>=;i--)
{
if(p<)
ai='';
else
ai=a[p];
if(q<)
bi='';
else
bi=b[q];
anss[i]=((ai-''+bi-''+jin)%)+'';
jin=(ai-''+bi-''+jin)/;
p--;
q--;
}
if(jin)
{
char x=jin+'';
anss=x+anss;
}
return anss;
} int main()
{
while(cin>>a>>b)
{
int lena=a.size();
int lenb=b.size();
ia=lena;
ib=lenb;
for(i=;i<lena;i++)
{
if(a[i]=='.')
ia=i;
}
for(i=;i<lenb;i++)
{
if(b[i]=='.')
ib=i;
}
string prea(a,,ia); //整数部分
if(prea.empty())
prea=""; string preb(b,,ib);
if(preb.empty())
preb=""; string la=""; //小数部分
if(ia!=lena)
la=a.substr(ia+); string lb="";
if(ib!=lenb)
lb=b.substr(ib+); string presum=bigadd(prea,preb); if(la.size()>lb.size()) //补0
{
string bu(la.size()-lb.size(),'');
lb=lb+bu;
}
if(la.size()<lb.size())
{
string bu(lb.size()-la.size(),'');
la=la+bu;
}
string lsum=bigadd(la,lb); if(lsum.size()>max(la.size(),lb.size())) //处理进位
{
string jin=lsum.substr(,lsum.size()-max(la.size(),lb.size()));
lsum=lsum.substr(lsum.size()-max(la.size(),lb.size()));
presum=bigadd(presum,jin);
}
for(i=lsum.size()-;i>=;i--) //处理多余的0
{
if(lsum[i]!='')
break;
lsum.erase(i);
} if(lsum.empty())
cout<<presum<<endl;
else
cout<<presum<<'.'<<lsum<<endl;
}
}
HDU 1753 大明A+B (大正小数加法、字符串处理)的更多相关文章
- hdu 1753 大明A+B(高精度小数加法)
//深刻认识到自己的粗心,为此浪费了一天.. Problem Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫"大明". 这时他已经不是 ...
- [HDOJ] 1753.大明A+B (大数加法)
Problem Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫"大明". 这时他已经不是那个只会做100以内加法的那个"小明 ...
- hdu 1753 大明A+B
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1753 容易出错的事例: 0.1 0.2 1.88 22.22 1 0.01 大概出错的几个点,做久了思维根 ...
- hdu 1753 大明A+B(大数)
题意:小数大数加法 思路:大数模板 #include<iostream> #include<stdio.h> #include<string.h> using na ...
- HDU 1753 大明A+B(字符串模拟,简单题)
简单题,但要考虑一些细节: 前导0不要,后导0不要,小数长度不一样时,有进位时,逆置处理输出 然后处理起来就比较麻烦了. 题目链接 我的代码纯模拟,把小数点前后分开来处理,写的很繁杂,纯当纪念——可怜 ...
- HDU1753 (大正小数相加)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1753 大明A+B Time Limit: 3000/1000 MS (Java/Others) ...
- HDU 5842 Lweb and String(Lweb与字符串)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- 怎样避免C#中将小数转换为字符串时出现科学记数法
在C#中如果float.double.decimal类型的值,小数点后的0太多时,C#会用科学记数法来表示小数的值. 例如下面的double类型0.00009,如果我们直接将其用ToString()方 ...
- HDUOJ-------1753大明A+B(大数之小数加法)
大明A+B Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
随机推荐
- 有时间看看这个方法 会不会 避免 xss
Server.HtmlEncode 能将字符串原样输出 包括html标签
- pyhton函数
函数编写文档 放在函数开头的字符串称为文档字符串(docstring),将作为函数的一部分存储起来 def square(x): 'Calculates the square of the numbe ...
- [Linux系统] (5)系统网络
一.路由表 路由表是如何决策的: [root@centos-clone1 ~]# route -n Kernel IP routing table Destination Gateway Genmas ...
- static后期静态绑定
先说一下__CLASS__,get_class() , get_called_class() 区别: __CLASS__获取当前的类名, get_class()与上面一样,都是获取当前的类名, ge ...
- IE8 CSS样式兼容性清单
IE8对于CSS2.1是完整支持的,对于CSS3则只是部分支持.下文中只列出IE8完全支持及完全不支持的样式,对于. 注:下文中的E.F均指html标签名,如p,img等. At-rules At类规 ...
- Python实用黑科技——找出序列里面出现次数最多的元素
需求: 如何从一个序列中快速获取出现次数最多的元素. 方法: 利用collections.Counter类可以解决这个问题,特别是他的most_common()方法更是处理此问题的最快途径.比如,现在 ...
- Linux命令-文件传输
Linux命令-文件传输 Linux lprm命令 Linux lprm命令用于将一个工作由打印机贮列中移除 尚未完成的打印机工作会被放在打印机贮列之中,这个命令可用来将常未送到打印机的工作取消.由于 ...
- Jmeter -- 监听 -- 查看每个请求的启动时间等信息
步骤: 1. 添加监听器 Add --> Listener --> View Results in Table 2. 执行线程组,查看监听信息
- echarts_02
1. 如果数据加载时间较长,一个空的坐标轴放在画布上也会让用户觉得是不是产生 bug 了,因此需要一个 loading 的动画来提示用户数据正在加载. ECharts 默认有提供了一个简单的加载动画. ...
- nodejs 中的 cookie 及 session
cookie-parser 插件:cookie解析,加密的操作 cookie-session 插件:session 的解析操作 http 是无状态的 cookie:在浏览器保存一些数据,每次向服务器发 ...