您的位置:首页 > 其它

zoj 2476 Total Amount(水~)

2011-01-22 09:51 369 查看
给你money数,小数点左边三位一个逗号那种,小数点后有且仅有两位小数。让你相加后输出。



由于 All amounts and the total amount are between $0.00 and $20,000,000.00



所以,我是将数转化为整数算的。用atoi,把非数字都去掉,正好20亿,不超整型,真好。然后相加。



开始WA了 = =。。。需要考虑如下情况,ans(即加和)小于10,ans加和在10和100之间。



由于我下面的处理是考虑至少三位数的,所以这两种情况特殊处理。



itoa不支持 = =。。。用了sprintf。



int sprintf(char *string,char *format[,argument,…])将字符串string 的内容重新写为格式化后的字符串





#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <stack>
#include <float.h>
using namespace std;
stack <char> s;
int main()
{
	int n,i,k,len,d;
	char str[20],to[20];
	char ss[30];
	int ans,tmp;
	while( scanf("%d",&n) != EOF && n )
	{
		ans = 0;
		getchar();
		for(i=0; i<n; i++)
		{
			gets(str);
			len = strlen(str);
			d = 0;
			for(k=1; k<len; k++)
			{
				if( isdigit( str[k] ) )
					to[d++] = str[k];
			}
			to[d] = '/0';
			tmp = atoi(to);
			ans += tmp;
		}
		if( ans < 10 )
		{
			printf("$0.0%d/n",ans);
			continue;
		}
		if( ans < 100 )
		{
			printf("$0.%d/n",ans);
			continue;
		}
		sprintf(ss,"%d",ans);
		len = strlen(ss);
		s.push(ss[len-1]);
		s.push(ss[len-2]);
		s.push('.');
		int k = 0;
		for(i=len-3; i>=0; i--)
		{
			k++;
			s.push(ss[i]);
			if( k % 3 == 0 && i )
				s.push(',');
		}
		putchar('</p>);
		while( !s.empty() )
		{
			printf("%c",s.top());
			s.pop();
		}
		printf("/n");
	}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: