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 ...
随机推荐
- 【SQL-自动生成编号】按规则自动生成单据编号 以及并发问题_使用触发器、函数 等
描述:每种单据新建时,自动生成它的单据编号. 规则如:固定码+日期+流水号 (ABC1603180001) 方法一:触发器 触发器的缺点是,执行了sql之后才看到编码. 测试:流水号不能超过最大数,否 ...
- PLT hook笔记
1. hook技术概述 hook技术是一种拦截用户函数调用的技术.通过hook技术可以实现统计用户对某些函数的调用次数,对函数注入新的功能的目标.在Linux平台,Hook技术可以分成用户和内核 ...
- Redis常见面试问题及答案
大量key在同一时间过期,注意什么? 如果过期时间过于集中,会导致Redis可能会出现短暂的卡顿现象.严重的话会出现缓存雪崩,一般需要在时间上加一个随机值, 使用过期时间分散一些. Redis分布式锁 ...
- HTML DOM 事件与方法
HTML DOM 事件允许Javascript在HTML文档元素中注册不同事件处理程序. 事件通常与函数结合使用,函数不会在事件发生前被执行! (如用户点击按钮). 鼠标事件 键盘事件 框架/对象(F ...
- BZOJ 3732: Network Kruskal 重构树
模板题,练练手~ Code: #include <cstdio> #include <algorithm> #define N 80000 #define setIO(s) f ...
- HDU 6667 Roundgod and Milk Tea
hdu题面 Time limit 6000 ms Memory limit 131072 kB OS Windows Source 2019 Multi-University Training Con ...
- AtCoder AGC017C Snuke and Spells
题目链接 https://atcoder.jp/contests/agc017/tasks/agc017_c 题解 很久前不会做看了题解,现在又看了一下,只想说,这种智商题真的杀我... 转化成如果现 ...
- 10.Python内置函数一览表
为了提高程序员的开发效率,Python 提供了很多可以直接拿来用的函数(初学者可以先理解为方法),每个函数都可以帮助程序员实现某些具体的功能. 举个例子,在 Python 2.x 中 print 只是 ...
- 对象转JSON字符串与json字符串转对象方法
JSON.stringify()[从一个对象中解析出字符串] JSON.parse()[从一个json字符串中解析出对象] var data = {"nums": 1, " ...
- uswgi
1.安装uwsgi注意: 1)在系统环境安装,非虚拟环境 2)使用对应python版本安装 3)要先安装python开发包 ###sudo apt-get install python3.6-dev ...