任意长度的正小数的加法(YT新人之巅峰大决战05)
Problem Description
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。
现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
Input
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
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)的更多相关文章
- YT新人之巅峰大决战04
Problem Description Eddy's interest is very extensive, recently he is interested in prime number. Ed ...
- YT新人之巅峰大决战03
题目链接 Problem Description Now give you two integers n m, you just tell me the m-th number after radix ...
- [c++]大数运算1---利用C++ string实现任意长度正小数、整数之间的加减法
一.概述 本文属于大大维原创,未经笔者本人允许,严禁转载!!! C/C++中的int类型能表示的范围是-2E31-2E31–1.unsigned类型能表示的范围是0-2E32–1,即 0-429496 ...
- [c++]大数运算---利用C++ string实现任意长度正小数、整数之间的加减法
本文为大大维原创,最早于博客园发表,转载请注明出处!!! 一.概述 C/C++中的int类型能表示的范围是-2E31-2E31–1.unsigned类型能表示的范围是0-2E32–1,即 0-4294 ...
- 生成任意长度的随机数 JS
1.Math.random().toString(36).substr(2); 结果:ywv6cnpkliahj4tep0 2. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- 求任意长度数组的最大值(整数类型)。利用params参数实现任意长度的改变。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 在js脚本里计算多个小数的加法问题
当在js脚本里计算多个小数的加法时,算得的结果往往会自动取整,这时候我们就应该加入以下代码: function toDecimal(x) { var val = Number(x); if (!isN ...
- C语言---递归反向输出任意长度的字符串
(该字符串可以包含空格和回车!) [题目要求] 编写一个递归函数,实现将输入的任意长度的字符串反向输出的功能. 例如输入字符串:ABCD,输出字符串:DCBA. [题目分析] 应用递归的思想有时可以很 ...
- 【模板小程序】任意长度非负十进制数转化为二进制(java实现)
妈妈再也不用担心十进制数过大了233(注意只支持非负数) import com.google.common.base.Strings; import java.math.BigInteger; imp ...
随机推荐
- Ajaxterm
Index of /software/ajaxterm Ajaxterm Since Mon Feb 28 03:22:42 CET 2011, hosted here: github.com/ant ...
- Android数据库高手秘籍(一)——SQLite命令
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/38461239 要想熟练地操作不论什么一个数据库.最最主要的要求就是要懂SQL语言, ...
- 关于CodeReview(java)(转)
关于codereview,在平时的开发中,经常忽略的环节,参照目前介绍写好代码的几本书和之前掉进的坑,做了一个总结,分享出来. 为什么要做 通过review规避一些代码层面的问题 提升可读性,方便后续 ...
- 2014年辛星解读Javascript之用DOM动态操纵HTML元�
关于DOM,我们了解了能够用DOM操纵HTML的一些属性和样式,还能够为HTML元素绑定事件等等,那么接下来,我们将涉及到用DOM来动态的创建.删除HTML等一些操作,我的核心思路还是重实战,因此,代 ...
- OpenCV 通过 MFC 的 Picture Control 控件操作图像
假设希望对显示在MFC Picture Control 控件里的图像进行操作,比方画线画点之类的,能够利用 OpenCV 结合 MFC 本身的鼠标响应函数来实现. 怎样将图像显示到 Picture C ...
- android插件技术-apkplug于OSGI服务基础-08
我们提供 apkplug 下OSGI使用demo 源代码托管地址为 http://git.oschina.net/plug/OSGIService 一 OSGI与android Service 异同点 ...
- Cocos2d-x 2地图步行实现:SPFA算法
本文乃Siliphen原创,转载请注明出处:http://blog.csdn.net/stevenkylelee 上一节<Cocos2d-x 地图行走的实现1:图论与Dijkstra算法> ...
- Linq 导出Excel
var d = db.User; Repeater1.DataSource = d.ToList(); Repeater1.DataBind(); string guid = Guid.NewGuid ...
- SharePoint发展 - 使用Session(代码更改webconfig)
博客地址 http://blog.csdn.net/foxdave SharePoint启用Session能够使用Powershell,戳这里:能够改动webconfig. 本篇叙述的重点是通过fea ...
- WPF MediaElement播放器2
在此问个问题,MediaElement播放本地和http上的视频没问题,但是ftp的怎么在本例中播放不了 若高手了解,请不吝赐教 using System; using System.Collecti ...