题意:
比较简单的题目,就是把给定格式的数字加起来,再按规定格式输出,想想感觉很简单,写起来还是不是很顺,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; }
原文地址:http://blog.csdn.net/david_jett/article/details/43575437