题目链接:

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. CSS预编译器:Sass(进阶),更快的前端开发

    1.@if     @if 指令是一个 SassScript,它可以根据条件来处理样式块,如果条件为 true 返回一个样式块,反之 false 返回另一个样式块 在 Sass 中除了 @if 之,还 ...

  2. thinkphp3.2 success方法和redirect方法

    $this->redirect('showlist',array(),3,'添加成功'); $this->success('添加成功',U('showlist'),3);

  3. vue实现上传上删除压缩图片

    <script> import {Config} from '@/config.js' import {mapState} from 'vuex' import {LocalData, t ...

  4. android IO流操作文件(存储和读取)

    存储文件: public class FileOperate extends Activity { private static final String FILENAME = "mydat ...

  5. angularjs -- 监听angularJs列表数据是否渲染完毕

    前端在做数据渲染的时候经常会遇到在数据渲染完毕后执行某些操作,这几天就一直遇到在列表和表格渲染完毕后,执行点击和选择操作.对于angularjs处理这类问题,最好的方式就是指令 directive. ...

  6. Automate the Sizing of your SGA in Oracle 10g

    How much memory does each of the individual components of the SGA need? Oracle now has methods to de ...

  7. [C# | XML] XML 反序列化解析错误:<xml xmlns=''> was not expected. 附通用XML到类解析方法

    使用 XML 反化时出现错误: public static TResult GetObjectFromXml<TResult>(string xmlString) { TResult re ...

  8. FileStream对文本进行读写操作

    class FileHelper { /// <summary> /// 检验文件路径是否合法 /// </summary> /// <param name=" ...

  9. Linux系统安全最小原则

    系统安全最小原则 1.安装Linux系统最小化,选包最小化,不用就不安装2.开机服务最小化(5个)ssh network sysstat crontd rsyslog3.操作命令最小化  rm -rf ...

  10. Linux crontab命令详解

    crontab:定时任务的守护进程,精确到分,设计秒的我们一般写脚本  -->相当于闹钟        日志文件:  ll /var/log/cron*        编辑文件: vim /et ...