题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1753

大明A+B

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 14422    Accepted Submission(s): 5290

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
分析:
一共3种情况:
1.两个数都是整数
2.两个数都是小数
3.一个整数,一个小数
将他们都变成两个小数的情况,很巧妙,然后就是小数点对齐,空的地方补0(首尾),使得化成的两个小数的长度是一样的,然后就是大数加法的知识了
注意点:
1.小数部分对整数部分有进位的时候,进位不要加在了小数点上面
2.结果是整数的时候,只输出整数部分,比如4.000要输出4
3.结果后面多余的0要去掉,比如2.10000要变成2.1
4.注意输入是这种情况的时候:
1.56  .36(就是小于1的小数输入的时候他把0去掉了)
代码如下:
#include<bits/stdc++.h>
using namespace std;
string add(string str1,string str2)
{
int l1=str1.length(),l2=str2.length();
int x1=,x2=,y1=,y2=;
for(int i=l1-;i>=;i--)
{
if(str1[i]!='.')
{
y1++;
if(y1==l1)
{
str1=str1+'.'+'';
y1=;
}
}
else
break;
}
for(int i=l2-;i>=;i--)
{
if(str2[i]!='.')
{
y2++;
if(y2==l2)
{
str2=str2+'.'+'';
y2=;
}
}
else
break;
}
if(y1>y2)
{
int k=y1-y2;
for(int i=;i<=k;i++)
{
str2=str2+'';
}
}else if(y1<y2)
{
int k=y2-y1;
for(int i=;i<=k;i++)
{
str1=str1+'';
}
}
for(int i=;i<l1;i++)
{
if(str1[i]!='.')
x1++;
else
break;
}
for(int i=;i<l2;i++)
{
if(str2[i]!='.')
x2++;
else
break;
}
if(x2>x1)
{
int k=x2-x1;
for(int i=;i<=k;i++)
{
str1=""+str1;
}
}else if(x1>x2)
{
int k=x1-x2;
for(int i=;i<=k;i++)
{
str2=""+str2;
}
}
l1=str1.length();
string str3="";
int c=;
for(int i=l1-;i>=;i--)
{
if(str1[i]=='.')
{
str3='.'+str3;
continue;
}
int x=str1[i]-''+str2[i]-''+c;
c=x/;
x=x%;
str3=char(x+'')+str3;
}
if(c!=)
{
str3=char(c+'')+str3;
}
int l3=str3.length(),f=;
for(int i=l3-;str3[i]!='.';i--)
{
if(str3[i]!='')
f=;
}
if(f==)
{
string str4="";
for(int i=;str3[i]!='.';i++)
{
str4=str4+str3[i];
}
return str4;
}
string str5="";
int ff;
l3=str3.length();
for(int i=l3-;i>=;i--)
{
if(str3[i]!='')
{
ff=i;
break;
}
}
for(int i=ff;i>=;i--)
{
str5=str3[i]+str5;
}
return str5;
}
int main()
{
string a,b;
while(cin>>a>>b)
{
string r=add(a,b);
cout<<r<<endl;
}
return ;
}

HDU1753 (大正小数相加)的更多相关文章

  1. float的精度,3个小数相加后精度丢失--小数比较使用bccomp()方法

    $a = 1200.00;$b = 1199.80;$c = 0.1;$u = 0.12; $d = $b+$c+$u;var_dump($a);var_dump($d);var_dump(bccom ...

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

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

  3. js 小数相加异常

    var a = 0.1; var b = 0.2; a + b//0.30000000000000004 这个bug可能是因为二进制计算溢出导致的. 解决办法:将小数转换为整数进行计算 计算后结果除以 ...

  4. js 小数相加

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...

  5. JS中小数相加相减时出现很长的小数点的解决方式

    1.问题: 平时写的代码中会出现这种情况,parseFloat(11.3-10.1) 运行的结果依然是1.200000000000001 代码示例: var arr = [0.0111,11.002, ...

  6. hdu 1002 A + B Problem II(大正整数相加)

    代码: #include<cstdio> #include<cstring> #define Min(a,b) ((a)<(b)?(a):(b)) using names ...

  7. python 小数相加报错 invalid literal for int() with base 10

    for i in column1: x = int(i) s += xprint "sum:",s,"count:",len(column1)# round ( ...

  8. JS 数字相加出现多个小数的问题

    今天在页面上用到了js进行小数相加119.01+0.01,结果大家都知道应该是:119.02的,然而结果是119..0200000…. ,莫名其妙的,还以为是我写的程序有问题,后来查了下才知道这是ja ...

  9. 解决js小数求和出现多位小数问题

    在小数相加时,可能会产生多个小数位.如下所示: var x=1+1;   //2 var x=1.20+1.11;   //2.31 var x=1.56+1.76;   //3.3200000000 ...

随机推荐

  1. LOJ#6035. 「雅礼集训 2017 Day4」洗衣服

    传送门 先处理出每一件衣服最早什么时候洗完,堆+贪心即可 然后同样处理出每件衣服最早什么时候烘干 然后倒序相加取最大值 # include <bits/stdc++.h> using na ...

  2. 【代码笔记】iOS-JASidePanelsDemo(侧滑)

    一,效果图. 二,工程图. 三,代码. AppDelegate.h #import <UIKit/UIKit.h> @class JASidePanelController; @inter ...

  3. CentOS7.4 + Hadoop2.9安装配置管理(分布式)

    1.  规划 1.1.  机器列表 NameNode SecondaryNameNode DataNodes 192.168.1.121 192.168.1.122 192.168.1.101 192 ...

  4. CVE-2018-10945 mongoose越界访问

    Hello , I found a vulneratility in mg_handle_cgi function The function is in mongoose.c , line 8925  ...

  5. Pwn with File结构体(一)

    前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 利用 FILE 结构体进行攻击,在现在的 ctf 比赛中也经常出现 ...

  6. Android埋点技术分析

    1.现有的几种埋点技术的实现原理和优劣分析 (1)代码埋点:将收集数据的代码直接写在需要的地方,当用户点击某个控件或者打开某个页面时调用到该部分代码完成数据的收集. 优势:准确性高,收集数据和发送数据 ...

  7. Maven环境变量配置和在Eclipse中的配置

    1.Maven环境变量配置 M2_HOME :变量值为maven的安装目录 在path后添加%M2_HOME%\bin; 检查JDK,maven配置的cmd命令 echo %JAVA_HOME% ja ...

  8. linux上设置mysql编码

    linux下设置mysql编码 linux下设置mysql编码 首先查找MySql的cnf文件的位置: [root@flyHome gaoxiang]# find / -iname '*.cnf' - ...

  9. Spring 集成 Ehcache 开启缓存

    1.jar包 1.1.slf4j-api-1.6.1.jar 1.2.ehcache-2.7.0.jar 1.3.spring-core-3.2.0.RELEASE.jar 1.4.spring-co ...

  10. cookie 常用的几种方法

    { setCookie: function(sName, sValue, oExpires, sPath, sDomain, bSecure) { var sCookie = sName + &quo ...