任意长度的正小数的加法(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 ...
随机推荐
- form表单中的 action=./?> 是什么意思
./代表当前目录,?代表查询字符串为空 action="" //一般可以为空的,这里的双引号都要有的,表示提单提交给自己(也就是当前页处理)action="a.php&q ...
- SOLOWHEEL - 电动独轮车 - SOLOWHEEL俱乐部聚会活动火热报名中
SOLOWHEEL - 电动独轮车 - SOLOWHEEL俱乐部聚会活动火热报名中 SOLOWHEEL俱乐部聚会活动火热报名中
- BNUOJ34973Liserious战队
Liserious战队 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class ...
- Resource temporarily unavailable用户的连接数设置的太小
-bash:fork:Resource temporarily unavailable的问题 出现这个问题的原因是linux用户的连接数设置的太小,只要修改max user processes就可 ...
- css中换行的几种方式
1.white-space:normal; 这个只针对中文有效 2.word-break:break-all; 强制换行,针对中文,数字,英文等都有效: 3.word-wrap:break-wo ...
- Oracle语句集锦
创建用户并赋予dba权限 1)进入cmd 2)sqlplus / as sysdba 或者 sqlplus sys/密码 as sysdba SQL> conn sys/wcq123@orcl ...
- Windows phone 8 学习笔记(6) 多任务
原文:Windows phone 8 学习笔记(6) 多任务 Windows phone 8 是一个单任务操作系统,任何时候都只有一个应用处于活跃状态,这里的多任务是指对后台任务的支持.本节我们先讲讲 ...
- tar解压出错
现象 # tar -zxvf aaa.tar.gz tar: This does not look like a tar archive tar: Skipping to next header ta ...
- nginx subrequest演示示例程序
只有简单subrequest应用演示示例. nginx.conf文件: #user nobody; worker_processes 1; #error_log logs/error.log; #er ...
- java线程例子登山
Through its implementation, this project will familiarize you with the creation and execution of thr ...