Uva-1586 分子量

//Uva-1586
#include<iostream>
#include<string>
using namespace std;

#define LOCAL

int main(){

#ifdef LOCAL 
    FILE *fin,*fout;
    fin = freopen("xt3-2in.txt","r",stdin);
    fout= freopen("xt3-2out.txt","w",stdout);
#endif //LOCAL
    int n;cin>>n;
    float sum;
    string s;
    while(n--){
        cin>>s;
        int i=0;
        sum=0;
        for(;s[i];){
            switch(s[i]){
                case 'C': 
                if(s[i+1]&&s[i+2]&&isdigit(s[i+1])&&isdigit(s[i+2])){
                //有后两位且为数字 
                    sum+=12.01*((int)(s[i+1]-'0')*10+(int)(s[i+2]-'0'));
                    i+=3;
                }
                else if(s[i+1]&&isdigit(s[i+1])){
                    //有后1位且为数字
                    sum+=12.01*(int)(s[i+1]-'0');
                    i+=2;
                }
                else{
                    //有后两位,不为数字
                     sum+=12.01;
                     i++; 
                }
                break;//C
                case 'H': 
                if(s[i+1]&&s[i+2]&&isdigit(s[i+1])&&isdigit(s[i+2])){
                //有后两位且为数字 
                    sum+=1.008*((int)(s[i+1]-'0')*10+(int)(s[i+2]-'0'));
                    i+=3;
                }
                else if(s[i+1]&&isdigit(s[i+1])){
                    //有后1位且为数字
                    sum+=1.008*(int)(s[i+1]-'0');
                    i+=2;
                }
                else{
                    //有后两位,不为数字
                     sum+=1.008;
                     i++; 
                }
                break;//H
                case 'O': 
                if(s[i+1]&&s[i+2]&&isdigit(s[i+1])&&isdigit(s[i+2])){
                //有后两位且为数字 
                    sum+=16.00*((int)(s[i+1]-'0')*10+(int)(s[i+2]-'0'));
                    i+=3;
                }
                else if(s[i+1]&&isdigit(s[i+1])){
                    //有后1位且为数字
                    sum+=16.00*(int)(s[i+1]-'0');
                    i+=2;
                }
                else{
                    //有后两位,不为数字
                     sum+=16.00;
                     i++; 
                }
                break;//O   
                case 'N': 
                if(s[i+1]&&s[i+2]&&isdigit(s[i+1])&&isdigit(s[i+2])){
                //有后两位且为数字 
                    sum+=14.01*((int)(s[i+1]-'0')*10+(int)(s[i+2]-'0'));
                    i+=3;
                }
                else if(s[i+1]&&isdigit(s[i+1])){
                    //有后1位且为数字
                    sum+=14.01*(int)(s[i+1]-'0');
                    i+=2;
                }
                else{
                    //有后两位,不为数字
                     sum+=14.01;
                     i++; 
                }
                break;//N   
        
            }
        }
        printf("%.3lf\n",sum);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容