根据+号分割开,然后分类解决。包含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;
}