//深刻认识到自己的粗心,为此浪费了一天。。

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.1
 
Sample Output
4
3.4555434454
2.1
 
Author
linle
 

/*************************

继续大数,这次是大 小数,

我用了一个结构体 分别存放 小数的  整数部分 和 小数部分,两个数组,分别相加,进位 分别处理,同时要注意  
前导0   和  后导0
 的处理。。详细看代码

************************/

//  小数 位的加法有问题

#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
#define N 8000
struct Bint// 大数的结构体
{
int high[N/2];// 存放整数位
int low[N/2];// 存放小数位
int p;// 整数位非零位数
int del; // 小数位非零位数
};
int Find(char a,char str[])// 找小数点的位置,实际返回的是整数部分的位数
{
int i,len = strlen(str);
for(i = 0;i<len;i++)
if(str[i]==a)
return i;
return len;// 整数时直接返回 长度
} void print(struct Bint s)// 输出函数
{
int i;
for(i = s.p-1;i>=0;i--)
printf("%d",s.high[i]);
if(s.del>0){
printf(".");
for(i = 0;i<s.del;i++)
printf("%d",s.low[i]);
}
printf("\n");
}
void trans(Bint &a,char str[])// 将输入的字符串形式的数 转换为结构体
{
memset(a.high,0,sizeof(a.high));
memset(a.low,0,sizeof(a.low));
int len = strlen(str);
a.p = Find('.',str);
a.del = (len==a.p)?0:(len-a.p-1);// 如果包含小数点则小数位数为 数的长度-整数位数-1
int i=0,ii = 0,jj = 0,pa= a.p,l = len-1;
while(str[i++]=='0'&&i<pa)// 去除前导0
a.p--;
while(str[l--]=='0'&&l>=pa)// 去除 后导 0
a.del--;
for(i = pa-1;i>=pa-a.p;i--)// 整数位赋值
a.high[ii++] = str[i]-'0';
for(i = pa+1;i<pa+1+a.del;i++)// 小数位 赋值
a.low[jj++] = str[i]-'0';
}
void add(char A[],char B[])// 加法 代码核心
{
int i;
Bint a,b,ans;// ans 存 结果
memset(ans.low,0,sizeof(ans.low));
memset(ans.high,0,sizeof(ans.high));
trans(a,A);
trans(b,B);
ans.p = (a.p>b.p)?a.p:b.p;// 取a,b 整数位的最大值
ans.del = (a.del>b.del)?a.del:b.del;// 同上,取小数位
// 以下两个循环为逐位相加的过程
for(i = 0;i<ans.p;i++)
ans.high[i] = a.high[i]+b.high[i];
for(i = 0;i<ans.del;i++)
ans.low[i] = a.low[i]+b.low[i];
// 进位处理
for(i = ans.del-1;i>0;i--)
{
if(ans.low[i]>=10)
{
ans.low[i-1]+=ans.low[i]/10;
ans.low[i]%=10;
}
}
//小数位第一位有进位时的处理
if(ans.low[0]>=10)
{
ans.high[0]+=ans.low[0]/10;
ans.low[0]%=10;
}
for(i = 0;i<ans.p;i++)
{
if(ans.high[i]>=10)
{
ans.high[i+1]+=ans.high[i]/10;
ans.high[i]%=10;
}
}
if(ans.high[ans.p]>0)
ans.p+=1;
// 相加以后产生后导 0 的处理
while(ans.low[ans.del-1]==0)
ans.del--;
print(ans);
}
int main()
{
char A[N],B[N];
while(cin>>A>>B)
{
add(A,B);
}
return 0;
}

hdu 1753 大明A+B(高精度小数加法)的更多相关文章

  1. HDU 1753 大明A+B (大正小数加法、字符串处理)

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

  2. FZU 2032 高精度小数加法

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

  3. hdoj 1753 大明A+B 高精度/java

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

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

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

  5. hdu 1753 大明A+B

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

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

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

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

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

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

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

  9. BigDecimal类(高精度小数)

    位置:java.math.BigDecimal 作用:提供高精度小数数据类型及相关操作 一.基本介绍 BigDecimal为不可变的.任意精度的有符号十进制数,其值为(unscaledValue * ...

随机推荐

  1. matlab inpolygon 判断点在多边形内

    如何判断一个点在多边形内部? xv= [0 3 3 0 0]; %x坐标 yv= [0 0 3 3 0];%y坐标 x=1.5; y=1.5; in=inpolygon(x,y,xv,yv) plot ...

  2. 解决下载Android Build-tools 19.1.0失败

    准备从Eclipse转到Android Studio了.今天尝试Android Studio的时候,被它提醒我SDK的Android Build-tools版本过低,需要升级. 于是打开Android ...

  3. ECshop彻底去版权(同时适用于2.7.3)

    前台部分: 1:去掉头部TITLE部分的ECSHOP演示站 Powered by ecshop前者”ECSHOP演示站”在后台商店设置 – 商店标题修改后者” Powered by ecshop”打开 ...

  4. 教你50招提升ASP.NET性能(七):总是在服务器端执行验证

    (13)Always perform validation on the server as well 招数13: 总是在服务器端执行验证 This isn’t exactly a performan ...

  5. iOS相机权限、相册权限、定位权限判断

    1.判断用户是否有权限访问相册 #import <AssetsLibrary/AssetsLibrary.h> ALAuthorizationStatus author = [ALAsse ...

  6. SQL Server重建索引计划

    每周日2点进行”一致性检查“ 每周六1点进行”重建索引“,重建索引会自动完成更新统计信息操作

  7. 部署SharePoint解决方式包时遇到的问题

    部署SharePoint解决方式包时遇到的问题 近期我在使用STSADM.EXE命令部署解决方式包的时候.遇到一个问题.很的难搞.         创建WSP文件非常easy.加入到解决方式库也非常e ...

  8. 0 Explore TreeView

    尽可能接近WINDOWS 8的资源管理器效果(这里只模仿它的效果,处理文件功能不包括在内)   TREEVIEW可以增加空白并且空白处不能单击 重绘三角箭头 重绘选中时的边框和填充色 重绘失去焦点时选 ...

  9. Linux开发环境搭建与使用——ubuntu更新设置

    ubuntu操作系统公布时,为了减小操作系统的体积,只配备了主要的系统软件.应用软件.我们开发中须要用到的大部分软件都须要在使用中从网上自行更新. 假设ubuntu没有网络,能够说寸步难行. 以下教大 ...

  10. C 队列顺序存储

    #ifndef __MY_SEQLIST_H__ #define __MY_SEQLIST_H__ typedef void SeqList; typedef void SeqListNode; // ...