坑爹的 小数加法
来源:互联网 发布:淘宝号注册马上注册 编辑:程序博客网 时间:2024/05/21 09:49
Description
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。
现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
Input
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
Output
Sample Input
1.1 2.91.1111111111 2.34443233431 1.1
Sample Output
43.45554344542.1
这个题真的是做哭了,妈呀,说多了都是泪啊,各种细节错误,一直a不过,痛苦啊,当最后看到Accepted的时候,真的是感觉要哭了。。。。。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
char n1[410],n2[410];
while(~scanf("%s%s",n1,n2))
{
int N1[410]={0},N2[410]={0},result[410]={0};//把去掉小数点后的数字编程整数保存在N1和N2中
int n1p=0,n2p=0,length1,length2,i,j,int1,int2,point1,point2;
int maxpoint,maxint;//maxpoint小数部分最长的位数 ,maxint整数部分最长的位数
for(i=0;n1[i]!='\0';i++)
{
if(n1[i]=='.')
{
n1p=i;//确定n1小数点的位置
}
}
if(n1p==0)
{
n1p=i;
length1=i;
point1=0;
int1=i;
}
else
{
length1=i-1;//n1的长度
int1=n1p;//n1的整数部分的位数
point1=i-n1p-1;//n1的小数部分的位数
}
for(j=0;n2[j]!='\0';j++)
{
if(n2[j]=='.')
{
n2p=j;//确定n2小数点的位置
}
}
if(n2p==0)
{
n2p=j;
length2=j;
point2=0;
int2=j;
}
else
{
length2=j-1;//n2的长度
int2=n2p;//n2的整数部分的位数
point2=j-n2p-1;//n2的小数部分的位数
}
if(point1>point2)
maxpoint=point1;
else
maxpoint=point2;
//n2整数部分补零,并且把字符型数组变成int型数组
if(int1>int2)
{
maxint=int1;
int k=int1-int2,l,h;//k的值等于补完零以后的第一个数字的位置
for(l=0,h=k;l<n2p;h++,l++)//l为原来字符数组的位置,h为int数组的位置
{
N2[h]=n2[l]-'0';//把n2的整数部分变成int型,赋值给N2
}
for(i=0;i<n1p;i++)//把n1整数部分进行转变
N1[i]=n1[i]-'0';
for(j=n1p+1;j<length1+1;i++,j++)//把n1的小数部分进行转变
N1[i]=n1[j]-'0';
for(i=n2p+1;i<length2+1;i++)//把n2的小数部分进行转换
N2[h++]=n2[i]-'0';
}
//n1整数部分补零,并且把字符型数组变成int型数组
else
{
maxint = int2;
int k=int2-int1,l,h;//k的值等于补完零以后的第一个数字的位置
for(l=0,h=k;l<n1p;h++,l++)//l为原来字符数组的位置,h为int数组的位置
{
N1[h]=n1[l]-'0';//把n1的整数部分变成int型,赋值给N1
}
for(i=0;i<n2p;i++)//把n2整数部分进行转变
{
N2[i]=n2[i]-'0';
}
for(j=n2p+1;j<length2+1;i++,j++)//把n2的小数部分进行转变
{
N2[i]=n2[j]-'0';
}
for(i=n1p+1;i<length1+1;i++)//把n1的小数部分进行转换
{
N1[h]=n1[i]-'0';
h++;
}
}
//进行加法运算
int jinwei=0,extra=0;
for(int k=maxint+maxpoint-1;k>=0;k--)
{
result[k]=(N1[k]+N2[k]+jinwei)%10;
jinwei=(N1[k]+N2[k]+jinwei)/10;
}
extra=jinwei;
//进行输出,注意输出最简形式,注意012.012300,22.00
int temp=0,nn=0;
if(extra)
printf("%d",extra);
for(i=0;i<maxint;i++)
printf("%d",result[i]);
for(i=maxint+maxpoint-1;i>=maxint;i--)
{
if(result[i]==0 && temp==0);
else
{
temp=1;
nn=i;
break;
}
}
if(nn==0)
{
cout<<endl;
}
else
{
cout<<".";
for(i=maxint;i<=nn;i++)
cout<<result[i];
cout<<endl;
}
}
return 0;
}
- 坑爹的 小数加法
- 大数小数的加法
- [2017-AspNet-MVC4] 简单加法的演化-2-小数加法
- 小数高精度加法
- hdu 1753 小数加法
- 高精度-小数加法【模板】
- HDOJ 1753 大明A+B (高精度的小数加法 java )
- NYOJ513 A+B Problem IV(带小数的大数加法)
- HDU1753 大明A+B(带小数的大数加法)
- 任意长度的正小数的加法(YT新人之巅峰大决战05)
- 数学问题--大数乘以小数,大数乘以大数,大数的加法以及减法
- [从头学数学] 第70节 小数的加法和减法
- js 对小数加法精度处理
- Javascript小数加法得到精确值
- HDU-高精度小数加法-最大400位
- 大数与小数模板(乘法,加法)
- POJ 1001 (坑爹的小数高精度乘法)
- hdu 1753 大明A+B(高精度小数加法)
- Android自定义View实现开关效果
- poi基本导入
- POJ 1733 Parity game
- 函数指针
- Spark DataFrames
- 坑爹的 小数加法
- 异或的应用及性质
- SmartMonkey--UI遍历
- oracle_单引号问题和execute immediate 赋值问题
- 洛谷 P1018 [NOIP2000 T2] 乘积最大
- 【华为OJ17】坐标移动----方法二(推荐)
- Unity资源热更之AssetBundle(3)———新版本AssetBundle
- 基于V4L2摄像头采集图片程序设计
- 十五章上机练习4