Time Limit: 1 second

Memory Limit: 2 MB

问题描述

给出两个高精度正实数(可以含有小数点或没有),最长200位,字符串读入 求它们的和,小数部分末尾的0要舍去。

Input

文件输入两行,第一行是被加数,第二行是加数,回车结束输入。

Output

输出求和的值,最后用回车结束

Sample Input

123456789.123456

987654321.4321

Sample Output

1111111110.555556

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=a101

【题解】



把两个数字小数部分的长度变成一样(不足补零);

这样小数部分就对齐了;

然后把小数点去掉;

进行正常的整数高精度加法就好了;

然后在进位的时候先不要把个位的0去掉;

进行完整数高精度加法之后;把小数点加到整数里面去;

然后再去掉个位的0;

要注意整数的情况比如0.9+0.1最后不要输成”1.”要把小数点去掉的。

特判一下就好;

去掉前导的0的话时候要注意别把小数点前的0也删掉了;

不然0.5就会变成.5;



【完整代码】

#include <string>
#include <algorithm>
#include <iostream>
#include <cstdio> using namespace std; const int MAXN = 250; string s1,s2;
int len1,len2;
int a[MAXN],b[MAXN],c[MAXN]={0}; void add0(string &s,int &l,int &r)
{
for (int i = l+1;i <= r;i++)
s+='0';
l = r;
} string sub(string s1,string s2)
{
int len1 = s1.size(),len2 = s2.size();
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
for (int i = 1;i <= len1;i++)
a[i] = s1[i-1]-'0';
for (int i = 1;i <= len2;i++)
b[i] = s2[i-1]-'0';
for (int i = 1;i <= 210;i++)
c[i] = a[i]+b[i];
for (int i = 1;i <= 210;i++)
{
c[i+1] = c[i+1]+c[i]/10;
c[i] %= 10;
}
string temp = "";
for (int i = 1;i <= 210;i++)
{
char key = c[i]+'0';
temp+=key;
}
return temp;
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
cin >> s1>>s2;
len1 = s1.size(),len2 = s2.size();
int pos1,pos2;
pos1 = s1.find('.',0),pos2 = s2.find('.',0);
int lp1,lp2;
lp1 = len1-1-pos1,lp2 = len2-1-pos2;
if (pos1!=-1 && pos2!=-1)
{
if (lp1>lp2)
add0(s2,lp2,lp1);
else
add0(s1,lp1,lp2);
s1.erase(s1.find('.',0),1);
s2.erase(s2.find('.',0),1);
}
else
if (pos1!=-1)
{
lp2 = 0;
add0(s2,lp2,lp1);
s1.erase(s1.find('.',0),1);
}
else
if (pos2!=-1)
{
lp1 = 0;
add0(s1,lp1,lp2);
s2.erase(s2.find('.',0),1);
}
else
lp1 = lp2 = 0;
string tempans = sub(s1,s2);
if (lp1!=0)
tempans.insert(lp1,".");
while (tempans!=""&& tempans[0]=='0')
tempans.erase(0,1);
if (tempans=="")
puts("0");
else
{
if (tempans[0]=='.')
tempans.erase(0,1);
reverse(tempans.begin(),tempans.end());
int len = tempans.size();
while (tempans[0]=='0' && tempans[1]!='.')
tempans.erase(0,1);
cout << tempans;
}
return 0;
}

【a101】高精度实数加法的更多相关文章

  1. java高精度实数和小数

    java 高精度实数和小数 String s = "1231222222222222222222222222222222222222222222222222222222"; Big ...

  2. FZU 2032 高精度小数加法

    题目描写很没意思..就是说给出n个小数 求它们的总和 因为给出的小数点后最多16位而要求保存至12位 而能直接使用的最精确的double只能到12位 于是13的进位可能被忽略 于是不可以用double ...

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

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

  4. hdu Exponentiation高精度实数乘幂(用了带小数的高精度模板)

    #include <cstdio> #include <cstring> #include <iostream> #include <cmath> #i ...

  5. 无线OSS-高精度整数加法

    #include<iostream> #include<string> using namespace std; int compareStr(string str1, str ...

  6. POJ 1504 Adding Reversed Numbers (水题,高精度整数加法)

    题意:给两个整数,求这两个数的反向数的和的反向数,和的末尾若为0,反向后则舍去即可.即若1200,反向数为21.题目给出的数据的末尾不会出现0,但是他们的和的末尾可能会出现0. #include &l ...

  7. hdu 1316 How many Fibs?(高精度斐波那契数)

    //  大数继续 Problem Description Recall the definition of the Fibonacci numbers:  f1 := 1  f2 := 2  fn : ...

  8. HDU ACM 1063 Exponentiation 大实数乘方

    分析:大实数乘方计算. #include<iostream> #include<string> using namespace std; struct BigReal //高精 ...

  9. 高精度运算专题1-加法运算(The addition operation)

    这个专题呢,我就来讲讲高精度的加法,下面是一个计算加法的函数(用数组a加上数组b结果存到数组c里面). 思路:先测一下数组a和数组b的长度,分别放到a[0].b[0]里面去,再从第二位开始相加,记得满 ...

随机推荐

  1. Codefroces Educational Round 27 (A,B,C,D)

    A. Chess Tourney time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  2. 44.delete用法

    声明+delete:函数禁止使用.可以使一个类禁止释放

  3. WdatePicker日期控件的使用

    将压缩包中的文件连带文件夹添加到项目中去,注意要完整的添加到项目中去,不要更改了其目录结构 然后在aspx页面中直接使用即可: 首先引入: <script src="/Controls ...

  4. Sql延时

    IF EXISTS(SELECT * FROM sys.procedures WHERE name='usp_wait30s')BEGIN DROP PROC usp_wait30sENDgocrea ...

  5. Linux平台下使用AdventNet ManageEngine OpUtils监控网络

    AdventNet ManageEngine OpUtils 是一套系统和网络监视工具,它有Linux/Windows系统平台的免费版和企业版,该软件是一款用于监视诸如路由器,交换机,服务器或者桌面这 ...

  6. 新手前端笔记之--初识css

    css样式表是为了容纳与html文档分离出来的样式属性而产生的,所以她理所当然的包含两个部分:1.样式的表示,使用{属性1:属性值:属性2:属性值:...},2.样式与标签的对应(如何找的对应标签), ...

  7. angular 子组件与父组件通讯

    1. 子组件app-sidebar.compnent.html (click)="goProject()"设置点击事件 <mat-list-item [routerLink] ...

  8. BZOJ4025: 二分图(LCT)

    Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考考你. Input ...

  9. CODEVS——T1979 第K个数

    http://codevs.cn/problem/1979/ 时间限制: 1 s  空间限制: 1000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Descript ...

  10. 今天看到可以用sqlalchemy在python上访问Mysql

    from sqlalchemy import create_engine, MetaData, and_ 具体的还没有多看.