欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

问题:大明A+B

程序员文章站 2022-07-15 09:42:50
...
问题:大明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;
 } 

相关标签: 小数相加

上一篇: Parity

下一篇: 以太坊parity安装