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. jdbc的数据库驱动类DriverManager.getConnection()详解

    1.Oracle8/8i/9i数据库(thin模式) Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); ...

  2. AIX 5.3下创建逻辑卷、添加文件系统并挂载

    首先创建逻辑卷smit lv ,这里没多大问题就不细述了. 输入要创建的逻辑卷名.所属卷组.分配多少个LP.创建在哪块磁盘上等,另外还可以设置镜像,默认是只有一份镜像的,即不做mirror. 到此LV ...

  3. POJ 2079 Triangle 旋转卡壳求最大三角形

    求点集中面积最大的三角形...显然这个三角形在凸包上... 但是旋转卡壳一般都是一个点卡另一个点...这种要求三角形的情况就要枚举底边的两个点 卡另一个点了... 随着底边点的递增, 最大点显然是在以 ...

  4. 利用zip格式实现手机客户端二维码扫描分享识别

    场景: 用户A想要将某应用推荐给用户B,用户B扫描用户A的手机app中的二维码进行下载和安装, 并且需要识别用户B是扫描了用户A的二维码,进而给用户A一定的奖励. (例如:健一网app) zip格式: ...

  5. Java IO:SocketChannel和Selector在ZooKeeper中应用

    转载请注明出处:jiq•钦's technical Blog 假设不了解SocketChannel和Selector.请先阅读我的还有一篇博文:点击打开链接 ZooKeeper的启动从QuorumPe ...

  6. 企业网管软件之SOLARWINDS实战-基于浏览器的网络流量监控

    本文出自 "李晨光原创技术博客" 博客,谢绝转载!

  7. javafx spring

    javafx spring http://files.cnblogs.com/files/rojas/airhacks_control.zip

  8. Vue框架学习笔记

    <div id="app"> </div> var app = new Vue({ el:"#app", // 绑定的元素 data:{ ...

  9. ubuntu下useradd与adduser差别,新建用户不再home文件夹下

    useradd username不会在/home下建立一个目录username adduser username会在/home下建立一个目录username useradd -m username跟a ...

  10. POJ--1753--Flip Game【DFS】

    链接:http://poj.org/problem? id=1753 题意:一个4*4的方格,有白棋或者黑棋.每次操作是一个位置的颜色翻转,即白变黑.黑变白,而且与它相邻的四个位置的颜色也都跟着改变, ...