//http://codeforces.com/problemset/problem/727/B
//stringstream转double会丢精度,改为用sprintf(Str,"%f",Ans)来转double;
#include<bits/stdc++.h>
using namespace std;
const int MAX=1e3+5;
char Str[MAX];
double Ans=0;
int main()
{
cin>>Str;
int len=strlen(Str);
for (int i=0,j,k,num_dots,pos_lastdot; i<len; i++)
{
if (isdigit(Str[i])||Str[i]=='.')
{
char temp[MAX]= {0};
for (j=i,k=0,num_dots=0,pos_lastdot=0; isdigit(Str[j])||Str[j]=='.'; j++)
if (Str[j]=='.')
num_dots++,pos_lastdot=j;
else
temp[k]=Str[j],k++;
//cout<<temp<<' '<<k<<' '<<num_dots<<' '<<j-i<<' '<<pos_lastdot<<' '<<j<<endl;
stringstream ss(temp);
int num;
ss>>num;
if (j-pos_lastdot==3&&num_dots)
Ans+=0.01*num;
else if (j-pos_lastdot==2&&num_dots)
Ans+=0.1*num;
else
Ans+=num;
i=j;
}
}
sprintf(Str,"%f",Ans);
len=strlen(Str);
for (int i=len-1; i>=0; i--)
if (Str[i]=='0')
Str[i]='\0';
else
break;
len=strlen(Str);
bool Mark[MAX]= {false};
int pos;
for (int i=len-1; i>=0; i--)
if (Str[i]=='.')
{
pos=i;
for (int j=i; j>0; j-=3)
Mark[j]=true;
if (i==len-2)
Str[len]='0',Str[len+1]='\0';
if (i==len-1)
Str[i]='\0';
break;
}
len=strlen(Str);
for (int i=0; i<len; i++)
{
if (Mark[i])
cout<<'.';
if (i!=pos)
cout<<Str[i];
}
return 0;
}
CodeForces 727B BillTotalValue 字符串模拟题
最新推荐文章于 2019-08-21 16:46:18 发布