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