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;

}

 

你可能感兴趣的:(HDU)