HDU-1753-大明A+B

347 阅读1分钟

                                                            大明A+B

 

Problem Description

话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。
现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。

Input

本题目包含多组测试数据,请处理到文件结束。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。

Output

请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见

Sample Input

1.1 2.9

1.1111111111 2.3444323343

1 1.1

Sample Output

4

3.4555434454

2.1

题意描述

求和

解题思路:

把整数部分和小数部分分别存在数组中,分别求和。

程序代码:

#include<stdio.h>
#include<string.h>
int Max(int a,int b);
int main()
{
	char str1[410],str2[410];
	int max1[410],min1[410],max2[410],min2[410];
	int i,l1,l2,p,q,m,n;
	
	while(scanf("%s%s",str1,str2)!=EOF)
	{
		memset(max1,0,sizeof(max1));
		memset(max2,0,sizeof(max2));
		memset(min1,0,sizeof(min1));
		memset(min2,0,sizeof(min2));
		l1=strlen(str1);
		l2=strlen(str2);
		p=0;
		q=0;
		for(i=0;str1[i]!='\0';i++)
		{
	
			if(str1[i]=='.')
				break;
			else
				p++;
		}
		for(i=0;i<p;i++)
			max1[i]=str1[p-1-i]-'0';
		for(i=0;i<l1-1-p;i++)
			min1[i]=str1[p+1+i]-'0';
		for(i=0;str2[i]!='\0';i++)
		{
	
			if(str2[i]=='.')
				break;
			else
				q++;
		}
		for(i=0;i<q;i++)
			max2[i]=str2[q-1-i]-'0';
		for(i=0;i<l2-1-q;i++)
			min2[i]=str2[q+1+i]-'0';
		m=Max((l1-p-1),(l2-q-1));
		for(i=m-1;i>0;i--)
		{
			min1[i]+=min2[i];
			if(min1[i]>9)
			{
				min1[i]%=10;
				min1[i-1]++;
			}
		}
		min1[0]+=min2[0];
		if(min1[0]>9)
		{
			min1[0]%=10;
			max1[0]++;
		}
		n=Max(p,q);
	
		for(i=0;i<n;i++)
		{
			max1[i]+=max2[i];
			if(max1[i]>9)
			{
				max1[i]%=10;
				max1[i+1]++;
			}
		}
		if(max1[n]>0)
			for(i=n;i>=0;i--)
				printf("%d",max1[i]);
		else
			for(i=n-1;i>=0;i--)
				printf("%d",max1[i]);
		while(1)
		{
			if(min1[m-1]==0)
				m--;
			else
				break;
		}
		if(m>0)
			printf(".");
		for(i=0;i<m;i++)
			printf("%d",min1[i]);
		printf("\n");
	}
	return 0;
}

int Max(int a,int b)
{
	if(a>b)
		return a;
	else
		return b;
}