ZOJ 2476 Total Amount

题意:

比较简单的题目,就是把给定格式的数字加起来,再按规定格式输出,想想感觉很简单,写起来还是不是很顺,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

相关文章:

你感兴趣的文章:

标签云: