在想更好的处理方法,现在却只能有这个糟烂的代码了……不好意思
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; const int maxn=200; char s[maxn]; double ans[maxn]; int get_num(int pos,int len) { int temp; for(int i=pos;i<len;i++) { if(s[i]<='9'&&s[i]>='0') temp=i; else break; } int sum=0; for(int i=pos;i<=temp;i++) { sum=sum*10+(s[i]-'0'); } return sum-1; } int main() { int t; scanf("%d",&t); while(t--) { memset(ans,0,sizeof(ans)); scanf("%s",s); int len=strlen(s); int flag=0; for(int i=0;i<len;i++) { if(s[i]=='C') ans[i]=12.01; if(s[i]=='H') ans[i]=1.008; if(s[i]=='O') ans[i]=16.00; if(s[i]=='N') ans[i]=14.01; if(s[i]>='1'&&s[i]<='9'&&flag==0) { ans[i]=ans[i-1]*get_num(i,len); flag=1; } if(!(s[i]>='1'&&s[i]<='9')) { flag=0; } } double sum_=0; for(int i=0;i<len;i++) { sum_+=ans[i]; } printf("%.3lf\n",sum_); } return 0; }
uva 1586 - Molar mass,布布扣,bubuko.com
时间: 2024-10-12 13:37:14