A+B Problem IV
时间限制:
1000
ms
|
内存限制:
65535
KB
难度:
3
描述
-
acmj最近发现在使用计算器计算高精度的大数加法时很不方便,于是他想着能不能写个程序把这个问题给解决了。
-
输入
-
包含多组测试数据
每组数据包含两个正数A,B(可能为小数且位数不大于400)
输出
-
每组输出数据占一行,输出A+B的结果,结果需要是最简的形式。
样例输入
-
1.9 0.1
0.1 0.9
1.23 2.1
3 4.0
样例输出
-
2
1
3.33
7
来源
-
hdu
上传者
-
路过这
代码:
#include
#include
using namespace std;
int main()
{
char num1[1000],num2[1000];
while(cin>>num1>>num2)
{
int num[1020]={0};
int flag1,flag2;
int len1,len2;
int t;
int i,j,k;
len1=strlen(num1);
len2=strlen(num2);
for(i=0;i
if(num1[i]=='.')
{
flag1=i;
break;
}
if(i>=len1)
flag1=i;
for(i=0;i
if(num2[i]=='.')
{
flag2=i;
break;
}
if(i>=len2)
flag2=i;
i=flag1-1;j=flag2-1;
k=j;
if(i>j)
k=i;
k+=5;
t=k;
while(i>=0||j>=0)
{
if(i<0)
num[k]=num2[j]-'0';
elseif(j<0)
num[k]=num1[i]-'0';
else
num[k]=num1[i]-'0'+num2[j]-'0';
i--;j--;k--;
}
//整数部分
for(i=t;i>=0;i--)
{
if(num[i]>=10)
{
num[i-1]+=num[i]/10;
num[i]%=10;
}
}
i=flag1+1;j=flag2+1;
k=t+1;
while(i
{
if(i>=len1)
num[k]=num2[j]-'0';
elseif(j>=len2)
num[k]=num1[i]-'0';
else
num[k]=num1[i]-'0'+num2[j]-'0';
i++;j++;k++;
}
//小数部分
for(i=k-1;i>=t+1;i--)
if(num[i]>=10)
{
num[i-1]+=num[i]/10;
num[i]%=10;
}
//输出整数部分
for(i=0;i<=t;i++)
if(num[i])
break;
if(i>t)
cout<<"0";
else
for(j=i;j<=t;j++)
cout<<num[j];
//输出小数部分
for(i=k-1;i>=t+1;i--)
if(num[i])
break;
if(i>=t+1)
{
cout<<".";
for(j=t+1;j<=i;j++)
cout<<num[j];
}
cout<<endl;
}
}