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. 解决org.hibernate.LazyInitializationException: could not initialize proxy - no Session懒载入问题

    问题描写叙述: Struts Problem Report Struts has detected an unhandled exception: Messages: could not initia ...

  2. atitit.高级编程语言的特性 and 未来趋势与进化.doc

    atitit.高级编程语言的特性 and 未来趋势与进化.doc 1 编程语言的发展历程 1 1.1 编程语言的进化,起始发现背后的思想 :不论什么两个系统之间的复杂性,都能够通过加入一个抽象层要屏蔽 ...

  3. OC -- 第一个类

    OC -- 第一个类 类名:Car 属性:轮胎个数.时速 行为:跑 完整写一个类:类的声明和实现 1.    类的声明 代码: // NSObject 再Foundation框架中 #import & ...

  4. 新浪SAE数据库信息

    此账号仅能在SAE平台上使用,不能从外部连接我们建议开发者使用SaeMysql操作数据库 如果您想自己实现数据库相关操作,可以使用以下常量: 用户名  : SAE_MYSQL_USER 密 码 : S ...

  5. hdu3496(二维背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3496 题意:题意是 DuoDuo 想看n部电影,但是被要求最长能看的总时间数为 L,每部电影有他的时长 ...

  6. C++ 中获取 可变形參函数中的參数

    #include <iostream> #include <stdarg.h> using namespace std; int ArgFunc(const char * st ...

  7. 抽出SqlHelper

    什么叫SqlHelper,通过简单的翻译,能够获得这是对Sql的帮助,那么它究竟对我们的Sql做出了什么样的帮助呢? 在一款软件的设计编程中,总是会对数据库有连接的.假设你用的是SqlServer的数 ...

  8. 备份恢复与CRM集成的sharepoint站点

    在部署CRM与Sharepoint2010集成文档管理之后,一直担心如果需要在新服务器上重新部署CRM, 那么之前与CRM集成的Sharepoint2010文档内容,是否可以重新正确映射到相应的文档位 ...

  9. Top 10 Mistakes Java Developers Make(转)

    文章列出了Java开发者最常犯的是个错误. 1.将数组转换为ArrayList 为了将数组转换为ArrayList,开发者经常会这样做: ? 1 List<String> list = A ...

  10. HttpMime 处理 多部件 POST 请求

    HttpMime 处理 多部件 POST 请求 在有的场合例如我们要用到上传文件的时候,就不能使用基本的GET请求和POST 请求了,我们要使用多部件的POST请求.由于Android 附带的 Htt ...