nyoj_513_A+B Problem IV_20130131532
A+B Problem IV
- 描述
- 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 <stdio.h> #include <string.h>
#define MAX 440
int an1[MAX],an2[MAX],an3[MAX],an4[MAX];
char str1[MAX],str2[MAX],s[2*MAX];
int main()
{
memset(s,0,sizeof(s));
while(gets(s))
{ int i,j,t=0;
int len1,len2,len;
memset(str1,0,sizeof(str1));
memset(str2,0,sizeof(str2));
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
memset(an3,0,sizeof(an3));
memset(an4,0,sizeof(an4));
len=strlen(s);
for(i=0,j=0;i<len;i++)
{
if(s[i]==' ')
break;
else
str1[j++]=s[i];
}
for(i+=1,j=0;i<len;i++)
{
str2[j++]=s[i];
}
len1=strlen(str1);
for(i=0;i<len1;i++)
{
if(str1[i]=='.')
{t=i;break;}
}
if(i==len1)
t=i;
for(i+=1,j=1;i<len1;i++)
{
an2[j++]=str1[i]-'0';
}
for(i=t-1,j=0;i>=0;i--)
{
an1[j++]=str1[i]-'0';
}
/*
for(i=0;i<10;i++)
{
printf("%d",an1[i]);
}
for(i=0;i<10;i++)
{
printf("%d",an2[i]);
}
*/
len2=strlen(str2);
t=0;
for(i=0;i<len2;i++)
{
if(str2[i]=='.')
{t=i;break;}
}
if(i==len2)
t=i;
for(i+=1,j=1;i<len2;i++)
{
an4[j++]=str2[i]-'0';
}
for(i=t-1,j=0;i>=0;i--)
{
an3[j++]=str2[i]-'0';
}
for(i=MAX-1;i>=0;i--)
{
an2[i]+=an4[i];
if(an2[i]>=10)
{
an2[i]-=10;
an2[i-1]++;
}
}
if(an2[0]>0)
an1[0]++;
for(i=0;i<MAX;i++)
{
an1[i]+=an3[i];
if(an1[i]>=10)
{
an1[i]-=10;
an1[i+1]++;
}
}
for(i=MAX-1;i>0&&an1[i]==0;i--);
for(;i>=0;i--)
printf("%d",an1[i]);
for(i=MAX-1;i>0&&an2[i]==0;i--);
if(i>0)
{t=i;
printf(".");
for(i=1;i<=t;i++)
printf("%d",an2[i]);
}
printf("\n");
}
return 0;
}