码迷,mamicode.com
首页 > 其他好文 > 详细

ZOJ 2476 Total Amount

时间:2015-02-07 09:11:50      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:zoj   字符串   简单题   

题意:

比较简单的题目,就是把给定格式的数字加起来,再按规定格式输出,想想感觉很简单,写起来还是不是很顺,wa了5次,能注意的点都注意了,重新写了一遍才过的。现在总结以下几点易错点:

1.像小于10和小于100的需要特判。

2.不要用double解,精度不能保证,最后处理也烦,建议直接把数字读出来,虽说范围是int内,但不知道数据会不会坑,最好用long long。

3.处理‘,‘的时候,要注意总长度减去小数点后两位后刚好能整除3的情况,要注意这种情况下最前面不能带有‘,‘。


总结:虽说是简单题,但是wa了这么多次实在是太不应该了,比赛的时候,就跪了,还是要加强手感呀技术分享,调试的时候可以把一些中间量输出,调试会更快。



下面贴下代码:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
long long int StringToInt(string s)
{
	long long int res=0,flag=1;
	for(int i=s.length()-1;i>=0;i--)
	{
		res+=flag*(s[i]-'0');
		flag*=10;
	}
	return res;
}
string IntToString (long long int x)
{
	string res="";
	if(x==0)
	{
	  res+='0';
	  return res;	
	}
	while(x)
	{
		res+=(x%10+'0');
		x/=10;
	}
	reverse(res.begin(),res.end());
	return res;
}
int main()
{
	int n;
	long long int ans=0;
	string s,ss,sss;
	while(cin>>n&&n)
	{
		ans=0;
		for(int i=0;i<n;i++)
		{
		  cin>>s;
		  ss="";
		  for(int j=1;j<s.length();j++)	
		  {
		  	if(isdigit(s[j]))
  			ss+=s[j];
          }
          ans+=StringToInt(ss);
		}
		sss=IntToString(ans);
		cout<<'$';
		if(ans<10)cout<<"0.0"<<ans<<endl;
		else if(ans<100)cout<<"0."<<ans<<endl;
		else
		{
			int x=(sss.length()-2)%3;
			int y=(sss.length()-2)/3;
			int p=0;
			for(;p<x;p++)
			{
				cout<<sss[p];
			}
			for(int j=0;j<y;j++)
			{
				if(x)cout<<',';
				else x=1;
				cout<<sss[p+j*3]<<sss[p+j*3+1]<<sss[p+j*3+2];
			}
			cout<<"."<<sss[sss.length()-2]<<sss[sss.length()-1]<<endl;
		}
	}
	return 0;
} 


ZOJ 2476 Total Amount

标签:zoj   字符串   简单题   

原文地址:http://blog.csdn.net/david_jett/article/details/43575437

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!