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