hdu1753(精度计算)

http://acm.hdu.edu.cn/showproblem.php?pid=1753

#include<stdio.h>
#include<string.h>
char s[402],t[402],c[402];
int a[402];
int main()
{
	int i,j,k,d,b,n,m,f,w1,w2;
	while(scanf("%s %s",s,t)>0)
	{
		n=strlen(s);
		m=strlen(t);
		w1=w2=0;
		for(i=0;i<n;i++)
			if(s[i]!='.')
				if(s[i]!='0')
					w1=1;
		for(j=0;j<m;j++)
			if(t[j]!='.')
				if(t[j]!='0')
					w2=1;
		if(w1==0&&w2==0)
			printf("0");
		else
		{
		for(i=0;s[i]!='\0'&&s[i]!='.';i++);
		for(j=0;t[j]!='\0'&&t[j]!='.';j++);
		if(i==n)
		{
			s[i]='.';
			s[i+1]='0';
			n+=2;
			s[n]='\0';
		}
		if(j==m)
		{
			t[j]='.';
			t[j+1]='0';
			m+=2;
			t[m]='\0';
		}
		d=i;
		b=j;
		k=0;
		
		
		while(1)
		{
			d--;
			b--;
			if(d<0)
				break;
			if(b<0)
				break;
			c[k++]=s[d]+t[b];
		}
		if(d>=0)
			while(d>=0)
				c[k++]=s[d--];
		if(b>=0)
			while(b>=0)
				c[k++]=t[b--];
		k--;
		for(f=0;k>=0;k--,f++)
			if(c[k]>57)
				a[f]=c[k]-48*2;
			else
				a[f]=c[k]-48;
		a[f++]=-32767;
		while(1)
		{
			i++;
			j++;
			if(i==n)
				break;
			if(j==m)
				break;
			a[f++]=s[i]+t[j]-2*48;
		}
		if(i<n)
			while(i<n)
			a[f++]=s[i++]-48;
		if(j<m)
			while(j<m)
				a[f++]=t[j++]-48;
		for(i=f-1;i>0;i--)
			if(a[i]>0)
			if(a[i]/10>0)
			{
				if(a[i-1]>=0)
				a[i-1]+=a[i]/10;
				else
					a[i-2]+=a[i]/10;
				a[i]=a[i]%10;
			}
		for(j=f-1;j>=0;j--)
			if(a[j]<0)
			{
				j--;
				break;
			}
			else
			if(a[j]!=0)
				break;
		for(i=0;i<=j;i++)
			if(a[i]<0)
				printf(".");
			else
				printf("%d",a[i]);
		}
		printf("\n");
	}
	return 0;
}

 

posted @ 2012-11-23 13:17  紫忆  阅读(201)  评论(0编辑  收藏  举报