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

#include<iostream>

using namespace std;
void shuchu(char *a,int m1,int t1,int t2)
{int i;
for(i=799;i>=0;i--)
if(i!=m1) if(a[i]>'9'&&i!=0)
{
if(i==m1+1)
{a[i]=a[i]-10;
a[i-2]++;}
else
{ a[i]=a[i]-10;
a[i-1]++;
}
}
if(a[i]>'9'&&i==0)
{a[i]-=10;cout<<1;}
for(i=0;i<t1||i<t2;i++)
{
if(i==m1)
cout<<'.';
else
cout<<a[i]; } }
int main()
{ char a[800],b[800];
int t1,t2,m1,m2,n=0,i,i1,k1,k2;
while (cin>>a>>b)
{ t1=strlen(a);
t2=strlen(b);
for(i=t1;i<800;i++)
if((a[i]<'0'||a[i]>'9')&&a[i]!='.')
a[i]=NULL;
for(i=t2;i<800;i++)
if((b[i]<'0'||b[i]>'9')&&b[i]!='.')
b[i]=NULL;
m1=0;
m2=0; for(i=0;i<t1;i++)
{
if(a[i]=='.')
{
m1=i;
break;
}
} for(i=0;i<t2;i++)
{
if(b[i]=='.')
{
m2=i;
break;
}
}
k1=m1;
k2=m2; if(m1>=m2&&m2!=0)
{
for(k1--,k2--;k1>=0&&k2>=0;k1--,k2--)
a[k1]=a[k1]+b[k2]-48;
k1=m1;
k2=m2;
for(k1++,k2++;k1<t1||k2<t2;k1++,k2++)
a[k1]=a[k1]+b[k2]-48; shuchu(a,m1, t1, t2); } if(m2>m1&&m1!=0)
{
for(k1--,k2--;k1>=0&&k2>=0;k1--,k2--)
b[k2]=a[k1]+b[k2]-48;
k1=m1;
k2=m2;
for(k1++,k2++;k1<t1||k2<t2;k1++,k2++)
b[k2]=a[k1]+b[k2]-48; shuchu(b,m2, t1, t2); }
if(m1==0&&m2!=0)
if(t1<=m2)
{ for(t1--,k2--;t1>=0;t1--,k2--)
b[k2]=b[k2]+a[t1]-48;
for(i=799;i>=0;i--)
shuchu(b,m2, t1, t2);
}
else
{k1=t1;
for(k1--,k2--;k2>=0;k1--,k2--)
a[k1]=b[k2]+a[k1]-48;
k1=t1;
k2=m2;
for(;k1<800;k1++,k2++)
a[k1]=b[k2];
for(i=799;i>=0;i--)
shuchu(a,m1, t1, t2);
} if(m2==0&&m1!=0)
if(t2<=m1)
{ for(t2--,k1--;t2>=0;t2--,k1--)
a[k1]=b[t1]+a[k1]-48;//////////////////////////////
for(i=799;i>=0;i--)
shuchu(a,m1, t1, t2);
}
else
{k2=t2;
for(k1--,k2--;k2>=0;k1--,k2--)
b[k2]=a[k1]+b[k2]-48;
k2=t2;
k1=m1;
for(;k2<800;k2++,k1++)
b[k2]=a[k1];
for(i=799;i>=0;i--)
shuchu(b,m2, t1, t2);
}
if(m1==m2&&m2==0)
{
if(t1>t2)
{
m1=t1;m2=t2;
for(m1--,m2--;m2>=0;m1--,m2--)
a[m1]=a[m1]+b[m2]-48;
for(i=799;i>=0;i--)
{if(a[i]>'9'&&i!=0)
{a[i]=a[i]-10;a[i-1]++;}
if(a[i]>'9'&&i==0)
{a[i]=a[i]-10;cout<<1;}}
for(i=0;i<t1;i++) cout<<a[i];
}
if(t2>=t1)
{
m2=t2;m1=t1;
for(m1--,m2--;m1>=0;m1--,m2--)
b[m2]=a[m1]+b[m2]-48;
for(i=799;i>=0;i--)
{if(b[i]>'9'&&i!=0)
{b[i]=b[i]-10;b[i-1]++;}
if(b[i]>'9'&&i==0)
{b[i]=b[i]-10;cout<<1;}
}
for(i=0;i<t2;i++)
cout<<b[i]; } } }
return 0;
}

任意长度的正小数的加法(YT新人之巅峰大决战05)的更多相关文章

  1. YT新人之巅峰大决战04

    Problem Description Eddy's interest is very extensive, recently he is interested in prime number. Ed ...

  2. YT新人之巅峰大决战03

    题目链接 Problem Description Now give you two integers n m, you just tell me the m-th number after radix ...

  3. [c++]大数运算1---利用C++ string实现任意长度正小数、整数之间的加减法

    一.概述 本文属于大大维原创,未经笔者本人允许,严禁转载!!! C/C++中的int类型能表示的范围是-2E31-2E31–1.unsigned类型能表示的范围是0-2E32–1,即 0-429496 ...

  4. [c++]大数运算---利用C++ string实现任意长度正小数、整数之间的加减法

    本文为大大维原创,最早于博客园发表,转载请注明出处!!! 一.概述 C/C++中的int类型能表示的范围是-2E31-2E31–1.unsigned类型能表示的范围是0-2E32–1,即 0-4294 ...

  5. 生成任意长度的随机数 JS

    1.Math.random().toString(36).substr(2); 结果:ywv6cnpkliahj4tep0 2.   1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  6. 求任意长度数组的最大值(整数类型)。利用params参数实现任意长度的改变。

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. 在js脚本里计算多个小数的加法问题

    当在js脚本里计算多个小数的加法时,算得的结果往往会自动取整,这时候我们就应该加入以下代码: function toDecimal(x) { var val = Number(x); if (!isN ...

  8. C语言---递归反向输出任意长度的字符串

    (该字符串可以包含空格和回车!) [题目要求] 编写一个递归函数,实现将输入的任意长度的字符串反向输出的功能. 例如输入字符串:ABCD,输出字符串:DCBA. [题目分析] 应用递归的思想有时可以很 ...

  9. 【模板小程序】任意长度非负十进制数转化为二进制(java实现)

    妈妈再也不用担心十进制数过大了233(注意只支持非负数) import com.google.common.base.Strings; import java.math.BigInteger; imp ...

随机推荐

  1. 动态拼接lambda表达式树

    前言 最近在优化同事写的代码(我们的框架用的是dapperLambda),其中有一个这样很普通的场景——界面上提供了一些查询条件框供用户来进行过滤数据.由于dapperLambda按条件查询时是传入表 ...

  2. 读 Working with forms 一些心得

    Working with forms About this document This document provides an introduction to Django’s form handl ...

  3. httl开源JAVA模板引擎,动态HTML页面输出

    HTTL(Hyper-Text Template Language)是一个适用于HTML输出的开源JAVA模板引擎,适用于动态HTML页面输出,可用于替代JSP页面,它的指令类似于Velocity. ...

  4. [置顶] 我的Android进阶之旅------>如何将Android源码导入Eclipse中来查看(非常实用)

    Android源码下载完成的目录结构如如所示: step1:将.classpath文件拷贝到源代码的根目录 Android源码支持多种IDE,如果是针对APP层做开发的话,建议大家使用Eclipse开 ...

  5. AIR学习教程(一)

    一.AIR的简单介绍 Adobe® AIR™ 为跨操作系统执行时,通过它能够利用现有 Web 开发技术(Adobe® Flash® CS3 Professional.Adobe® Flex™.HTML ...

  6. Good Luck Charlie(听力恢复训练)

    系统的音标学习完毕后.在暑假进入了稍大强度的听力恢复训练.材料选择的是一部家庭情景喜剧片<Good Luck Charlie>,该剧是2010开播的.剧中运用到的大量词汇是和如今比較贴合的 ...

  7. 打开或导入项目,从脱机 Outlook 数据文件 (.ost)

    打开或导入项目,从脱机 Outlook 数据文件 (.ost) Microsoft Outlook 2010 doesn\rquote t 支持手动打开或导入项目,从一个 脱机 Outlook 数据文 ...

  8. OpenCV两张图片的合并

    转载请注明出处..! http://blog.csdn.net/zhonghuan1992 OpenCV两张图片的合并 原理: 两张图片合并,想想图片是用一个个像素点来存储.每一个像素点有他的值. 那 ...

  9. Oracle SQL Lesson (1) - 使用SQL Select语句获取数据

    第一节课: 启动数据库并且使用特定用户连接:su - oracle; 启动sqlplus并且使用sys连接:conn / as sysdba; 启动数据库:startup; 解锁用户:alter us ...

  10. HDU 3954 Level up(线段树)

    HDU 3954 Level up 题目链接 题意:k个等级,n个英雄,每一个等级升级有一定经验,每次两种操作,一个区间加上val,这样区间内英雄都获得当前等级*val的经验,还有一个操作询问区间经验 ...