问题:大明A+B

问题:大明A+B

https://vjudge.net/problem/HDU-1753

话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。

现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。

Input 本题目包含多组测试数据,请处理到文件结束。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。 Output 请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
Sample Input
1.1 2.9
1.1111111111 2.3444323343
1 1.1
Sample Output
4
3.4555434454
2.1

题意分析:

将整数部分和小数部分分别存入到两个数组中,从小数部分开始相加,如果大于10进1就行了。

AC代码:

# include <stdio.h>
# include <string.h>

char a[500], b[500];
int c[500], d[500], e[500], g[500], sum[500], sum1[500];
int main (void)
{
	while (~scanf("%s %s", a, b))
	{
		memset(c, 0, 500);
		memset(d, 0, 500);
		memset(e, 0, 500);
		memset(g, 0, 500);
		memset(sum, 0, 500);
		memset(sum1, 0, 500);
		int a0 = strlen(a), b0 = strlen(b), ca = 0, cb = 0, i, j, m, k = 0, k1 = 0;
		for (i = 0; a[i] != '\0'; i ++)
		{
			if (a[i] == '.')
			{
				ca = 1;
				break;
			}
		}
		m = 0;
		for (j = i-1; j >= 0; j --)
		{
			c[m ++] = a[j] -'0';
		}
		m = 0;
		for(j = i+1; j < a0; j ++)
		{
			d[m ++] = a[j] - '0';
		}
		for (i = 0; b[i] != '\0'; i ++)
		{
			if (b[i] == '.')
			{
				ca = 1;
				break;
			}
		}
		m = 0;
		for (j = i-1; j >= 0; j --)
		{
			e[m ++] = b[j] -'0';
		}
		m = 0;
		for(j = i+1; j < b0; j ++)
		{
			g[m ++] = b[j] - '0';
		}
		m = 0;	
		for (i = 499; i >= 0; i --)
		{
			sum[i] += d[i] + g[i];
			if (i == 0 && sum[i] >= 10)
			{
				sum[i] -= 10;
				sum1[0] ++;
			} 
			if (i != 0 && sum[i] >= 10)
			{
				sum[i] -= 10;
				sum[i-1] ++;
			}
		}
		for (i = 0; i <= 499; i ++)
		{
			sum1[i] += c[i] + e[i];
			if (sum1[i] >= 10)
			{
				sum1[i] -= 10;
				sum1[i+1] ++;
			}
		}
		for (i = 499; i >= 0; i --)
		{
			if (sum1[i] != 0)
			{
				break;
			}
		}
		if (i == -1)
		k1 = 1;
		if (k1 == 1)
		{
			printf("0");
			for (i = 499; i >= 0; i --)
			{
				if (sum[i] != 0)
				break;
			}
			if (i >= 0)
			printf(".");
			for (j = 0; j <= i; j ++)
			{
				printf("%d", sum[j]);
			}
			printf("\n");
		}
		else
		{
			for (j = i; j >= 0; j --)
			printf("%d", sum1[j]);
			for (i = 499; i >= 0; i --)
			{
				if (sum[i] != 0)
				break;
			}
			if(i >= 0)
			printf(".");
			for (j = 0; j <= i; j ++)
			{
				printf("%d", sum[j]);
			}
			printf("\n");
		}	
	}
	return 0;
 } 

猜你喜欢

转载自blog.csdn.net/liu344439833/article/details/80142531