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 ...
随机推荐
- 写在centos7 最小化安装之后
1.最小化安装之后首先解决联网问题(https://lintut.com/how-to-setup-network-after-rhelcentos-7-minimal-installation/) ...
- Java中SSM+Shiro系统登录验证码的实现方法
1.验证码生成类: import java.util.Random; import java.awt.image.BufferedImage; import java.awt.Graphics; im ...
- Springboot设置session超时时间
按优先级高到低说: 第一种: spring boot 启动类里面: package com.mycenter; import org.mybatis.spring.annotation.MapperS ...
- 在linux安装php
去www.php.net找下载最新的版本 http://www.php.net/downloads.php 下载解压 # wget http://cn2.php.net/distributions/ ...
- php重写与重载
转载:https://blog.csdn.net/binghui1990/article/details/9105237 重写/覆盖 override 指:子类重写了父类的同名方法 (注:1.重写 ...
- 文件选择对话框:CFileDialog
程序如下: CString FilePathName; //文件名参数定义 CFileDialog Dlg(TRUE,NULL,NULL, ...
- Codeforces Round #303 (Div. 2) D. Queue 水题贪心
题目: 题意:给你n个数值,要求排列这个序列使得第k个数值的前K-1个数的和>=第k个数值的个数尽可能多: #include <iostream> #include <cstd ...
- [HG]子树问题 题解
前言 模拟赛赛时SubtaskR3没开long long丢了20分. 题意简述 题目描述 对于一棵有根树(设其节点数为 \(n\) ,则节点编号从 \(1\) 至 \(n\) ),如果它满足所有非根节 ...
- malloc,calloc,realloc
与堆操作相关的两个函数 malloc #include<stdio.h> #include<stdlib.h> #include<string.h> int mai ...
- 论文阅读:ClickNF: a Modular Stack for Custom Network Functions
摘要: 网络功能虚拟化最近允许用等效的软件实现代替专用设备, Click路由器是朝这个方向迈出的第一步,它定义了用于通用数据包处理的模块化平台. 尽管Click具有重大影响,但它不提供本机L4实现,而 ...