游客 Signup | Login
中文 | En

2727 - 总金额

鉴于货币金额标准格式的列表,请计算总金额。 

我们定义如下的格式: 

1,金额以'$'开始。 

2,当且仅当它是小于1,前面有0。 

3,每个金额都带有2位小数 

4,左边每三个数字要一个逗号隔开

Input

输入包含多个测试。每个测试的第一行包含一个整数N(1<= N<=10000),表示的金额数。接下来的N行,包括N个金额。所有金额和总金额是大于等于0.00小于等于20,000,000.00。 N =0表示输入的结束。 

Output

对于每个输入测试,输出总金额。

Examples

Input

2
$1,234,567.89
$9,876,543.21
3
$0.01
$0.10
$1.00
0

Output

$11,111,111.10
$1.11

Solution C

#include "stdio.h"
#include "string.h"
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_WARNINGS

int sum_have, new_have;
int sum[20];
int new[20];

void change(char str[])
{
	int length = strlen(str);
	int i,j,k;
	j = 0;
	for (i = 1; i <= 20; i++)
	{
		new[i] = 0;
	}
	for (i = length; i >=0; i--)
	{
		if ((str[i] >= '0') && (str[i] <= '9'))
		{
			j++;
			new[j] = (int)str[i] - 48;
			new_have = j;
		}
	}
	


}


void work(int n)
{
	int i,j,max;
	char str[100];
	for (i = 1; i <= 20; i++)
	{
		sum[i] = 0;
	
	}
	sum_have = 0;
	for (i = 1; i <= n; i++)
	{
		gets(str);
		change(str);
		max = sum_have;
		if (new_have > sum_have) max = new_have;
		for (j = 1; j <= max; j++)
		{
			sum[j] = sum[j] + new[j];
			if (sum[j] > 9)
			{
				sum[j + 1] ++;
				sum[j] = sum[j] - 10;
				if (j +1> max) max = j+1;
			}
		}
		sum_have = max;
	}
	printf("$");
	if (sum_have < 3) printf("0.%d%d\n", sum[2], sum[1]);
	else
	{
		i = sum_have;
		j = 3-(sum_have-((sum_have-2)/3*3)-2);
		while (i>3)
		{
			printf("%d", sum[i]);
			j++;
			if (j == 3) 
			{
				printf(",");
				j = 0;
			}
			i--;
		}
		printf("%d.%d%d\n", sum[3], sum[2], sum[1]);
	}
}

void main()
{
	int n;
	while (1)
	{
		scanf("%d", &n);
		if (n == 0) break;
		getchar();
		work(n);
	}
}

Solution C++

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <map>
#include <queue>
#include <stack>
#include <iostream>
using namespace std;
char a[100], b[100], c[100];

void addtion(char *b)
{
	int i, j, la = strlen(a), lb = strlen(b), dig = 0, d;
	for(i = la, j = lb; i >= 1 && j >= 1; i --, j --)
	{
		if(a[i] >= '0' && a[i] <= '9' && b[j] >= '0' && b[j] <= '9')
		{
			d = (a[i] - '0' + b[j] - '0' + dig) / 10;
			a[i] = (a[i] - '0' + b[j] - '0' + dig) % 10 + '0';
			dig = d;
		}
	}

	for(;i >= 1 ; i --)
	{
		if(a[i] >= '0' && a[i] <= '9')
		{
			d = (a[i] - '0' + dig) / 10;
			a[i] = (a[i] - '0' + dig) % 10 + '0';
			dig = d;
		}
	}
	int k = j;
	for(; j >= 1 ; j --)
	{
		if(b[j] >= '0' && b[j] <= '9')
		{
			d = (b[j] - '0' + dig) / 10;
			b[j] = (b[j] - '0' + dig) % 10 + '0';
			dig = d;
		}
	}
	if(k > 0)
	{
		la += k;
		for(i = la + k; i > k ; i -- )
		{
			a[i] = a[i-k];
		}
		for(j = i ; j >= 0 ; j --)
		{
			a[j] = b[k--];
		}
	}
	if(dig > 0)
	{
		if((la - 4) % 4 == 3)
		{
			for(i = la + 2 ; i > 2; i --)
			{
				a[i] = a[i-2];
			}
			a[2] = ',';
			a[1] = dig + '0';
		}
		else
		{
			for(i = la + 1 ; i > 1; i --)
			{
				a[i] = a[i-1];
			}
			a[1] = dig + '0';
		}
	}
}

int main ()
{
	int n, m, i, j, k, len;
	while(scanf("%d",&n) && n)
	{
		strcpy(a,"$0.00");
		for(i = 0 ; i < n ; i ++)
		{
			scanf("%s",b);
			addtion(b);
		}
		printf("%s\n",a);
	}
	return 0;
}
Time Limit 2 seconds
Memory Limit 128 MB
Discuss Stats
上一题 下一题