根据+号分割开,然后分类解决。包含d的:n*(x+1)/2;不包含d的直接atoi一下就可以。
注意避免浮点数运算,可以全部都乘2然后输出的时候分奇偶判断是否输出.5。
注意输出浮点数的时候,如果有1000000之类的数可能会输出成1e+06的形式。全部使用整数计算可以避免此类问题。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF = 0x3f3f3f3f;
char str[10010];
int parse(char *p){
char *d = strchr(p,'d');
if(d==NULL){
return atoi(p)*2;
}else{
*d='\0';
int n = atoi(p);
int x = atoi(d+1);
return (x+1)*n;
}
}
int main()
{
cin>>str;
int len = strlen(str);
char *p = str;
ll ans = 0;
while(1){
char *ne = strchr(p,'+');
if(ne==NULL){
ans += parse(p);
break;
}else{
*ne='\0';
ans+=parse(p);
p=ne+1;
}
}
cout<<ans/2;
if(ans%2)cout<<".5";
cout<<endl;
return 0;
}
京公网安备 11010502036488号