题目链接:

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. Python3 笔记01:求两数之和

    这是来自于leetcode的题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数 ...

  2. 【代码笔记】iOS-cell自动变化大小

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  3. [微信小程序] 微信小程序富文本-wxParse的使用

    最近小程序蛮火的,公司要做于是学了一点点小程序 不知道你们有没有遇到过这种问题: 从公司服务器获取的文章内容是有HTML标签格式的一段内容,但是微信是不支持这些标签的,怎么办呢? 1.一般网站后台的文 ...

  4. H5学习入门

    [块级标签与行级标签的区别] 1.块级标签: 默认宽度100%(独占一行) 自动换行(右边不能有任何东西) 可以使用css设置宽度高度   2.行级标签: 内容宽度,由内容撑开(内容多宽,宽度就占多宽 ...

  5. 切换Fragment时实现数据保持

    摘要 Fragment设计初衷是为了简化不同屏幕分辨率的开发难度,他将代表一个功能的UI及其相关数据看做一个模块,以便达到复用.可以将Fragment看作是一个可以嵌入布局中的activity,有自己 ...

  6. Android手势密码实现

    图 二.实现思路: 1. 正上方的提示区域,用一个类(LockIndicator.java)来实现,自定义view来绘制9个提示图标: 2. 手势密码绘制区域,用一个类(GestureContentV ...

  7. Android设置日期DatePickerDialog

    设置日期DatePickerDialog package com.example.testview; import java.util.Calendar; import java.util.Date; ...

  8. BackgroundWorker原理剖析

    BackgroundWorker类位于System.ComponentModel命名空间下,主要用来异步执行一个长时间的操作,然后,在完成事件中安全更新UI的控件属性.UI中的控件是不允许非创建该控件 ...

  9. 解决initializing java tooling(1%)

    这是wtp的一个bug,下载附件runtimePatch_327801.zip,解压,放到eclipse下,重启就好了.

  10. Oracle EBS AP 已经完全付款的发票仍然可以选择并进行零金额的付款

    1>找出相应的发票; SELECT DISTINCT ai.invoice_id, ai.invoice_num invoice_num, pv.segment1 vendor_num, pv. ...