/*
* hdu-1753 daming a+b
* mike-w
* 2012-5-23
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_SIZE 456
typedef struct long_double
{
int ww[MAX_SIZE];
int ff[MAX_SIZE];
}ld;
int conv(char *s, ld *t)
{
int dot=-1,i;
for(i=0;s[i];i++)
if(s[i]=='.')
break;
dot=i;
for(i=1;dot-i>=0;i++)
t->ww[MAX_SIZE-i]=s[dot-i]-'0';
if(dot>=0 && s[dot]=='.')
for(i=0;s[i+dot+1];i++)
t->ff[i]=s[i+dot+1]-'0';
return 0;
}
int disp(ld *s)
{
int i,end;
/* whole part */
for(i=0;i<MAX_SIZE && s->ww[i]==0;i++)
;
if(i==MAX_SIZE)
printf("0");
else
{
for(;i<MAX_SIZE;i++)
printf("%d",s->ww[i]);
}
/* small part */
for(i=MAX_SIZE-1;i>=0 && s->ff[i]==0;i--)
;
if(i>=0) /* has small part */
{
putchar('.');
end=i;
for(i=0;i<=end;i++)
printf("%d",s->ff[i]);
}
putchar('\n');
return 0;
}
int add(ld *a, ld *b, ld *c)
{
int carry=0,i;
for(i=MAX_SIZE-1;i>=0;i--)
{
c->ff[i]+=a->ff[i]+b->ff[i]+carry;
carry=c->ff[i]/10;
c->ff[i]%=10;
}
for(i=MAX_SIZE-1;i>=0;i--)
{
c->ww[i]+=a->ww[i]+b->ww[i]+carry;
carry=c->ww[i]/10;
c->ww[i]%=10;
}
return 0;
}
int main(void)
{
#ifndef ONLINE_JUDGE
freopen("daming.in","r",stdin);
#endif
char buf[MAX_SIZE];
ld a,b,c;
while(scanf("%s",buf)!=EOF)
{
memset(&a,0,sizeof(a));
memset(&b,0,sizeof(b));
memset(&c,0,sizeof(c));
conv(buf,&a);
scanf("%s",buf);
conv(buf,&b);
add(&a,&b,&c);
disp(&c);
}
return 0;
}
HDU-1753 实数高精度加法
最新推荐文章于 2021-10-25 16:52:03 发布
本文详细介绍了如何在C++环境下将字符串形式的浮点数解析为双精度浮点数,并实现浮点数的加法运算。通过自定义函数conv进行字符串到浮点数的转换,利用disp函数展示转换结果,最后通过add函数完成浮点数加法操作。
1万+

被折叠的 条评论
为什么被折叠?



