大明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

请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample 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 (大正小数加法、字符串处理)的更多相关文章

  1. hdu 1753 大明A+B(高精度小数加法)

    //深刻认识到自己的粗心,为此浪费了一天.. Problem Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫"大明". 这时他已经不是 ...

  2. [HDOJ] 1753.大明A+B (大数加法)

    Problem Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫"大明". 这时他已经不是那个只会做100以内加法的那个"小明 ...

  3. hdu 1753 大明A+B

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1753 容易出错的事例: 0.1 0.2 1.88 22.22 1 0.01 大概出错的几个点,做久了思维根 ...

  4. hdu 1753 大明A+B(大数)

    题意:小数大数加法 思路:大数模板 #include<iostream> #include<stdio.h> #include<string.h> using na ...

  5. HDU 1753 大明A+B(字符串模拟,简单题)

    简单题,但要考虑一些细节: 前导0不要,后导0不要,小数长度不一样时,有进位时,逆置处理输出 然后处理起来就比较麻烦了. 题目链接 我的代码纯模拟,把小数点前后分开来处理,写的很繁杂,纯当纪念——可怜 ...

  6. HDU1753 (大正小数相加)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1753 大明A+B Time Limit: 3000/1000 MS (Java/Others)    ...

  7. HDU 5842 Lweb and String(Lweb与字符串)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  8. 怎样避免C#中将小数转换为字符串时出现科学记数法

    在C#中如果float.double.decimal类型的值,小数点后的0太多时,C#会用科学记数法来表示小数的值. 例如下面的double类型0.00009,如果我们直接将其用ToString()方 ...

  9. HDUOJ-------1753大明A+B(大数之小数加法)

    大明A+B Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

随机推荐

  1. c# 判断某个类是否实现某个接口

    typeof(IFoo).IsAssignableFrom(bar.GetType()); typeof(IFoo).IsAssignableFrom(typeof(BarClass));

  2. k8s中flannel:镜像下载不了

    重新部署一套K8S集群时,由于K8S需要扁平化的网络,所以当执行下面的 root@master ~]# kubectl apply -f kube-flannel.yml 会开始下载镜像,然后去启动, ...

  3. Unity3D_(游戏)卡牌03_选关界面

      启动屏界面.主菜单界面.选关界面.游戏界面 卡牌01_启动屏界面 传送门 卡牌02_主菜单界面 传送门 卡牌03_选关界面 传送门 卡牌04_游戏界面    传送门 选关界面效果 (鼠标放在不同关 ...

  4. [CSP-S模拟测试]:线性代数(模拟)

    题目传送门(内部题113) 输入格式 第一行一个正整数$n$. 接下来$n$行,每行$n$个整数,描述$C$矩阵.保证输入的是一个林先森矩阵. 输出格式 若不可能实现,则输出一行$Impossible ...

  5. jquery 动态增加删除行

    最近写程序,碰巧有动态增加删除行,下面就记录一下 html就不写了,也没有什么,直接上核心了 新增行 function addRow(obj){ //获得table一共有多少行,方便追加的时候给序号赋 ...

  6. 装win7英文版装系统学习

    1:语言变换,下载Vistalizator ,详细的方法点击:方法见.需要安装语言包,语言包地址请点击:语言包.

  7. SpringBoot 使用定时任务动态执行任务

    import com.patient.core.adapter.CorsFilter; import org.mybatis.spring.annotation.MapperScan; import ...

  8. springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版)

    一.引入相应的maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...

  9. leetcode 200岛屿的个数

    主要考察图搜索: 方法一:染色法,时间O(mn) 遍历一遍,再通过BFS或DFS将所有临近岛屿染色,使用dfs时将numIslands中的bfs换成dfs即可: /***** 遍历所有的点: 只要遇见 ...

  10. 设置ubuntu14.04命令行启动

    编辑文件"/etc/default/grub",  把 GRUB_CMDLINE_LINUX_DEFAULT="quiet"  改成GRUB_CMDLINE_L ...