Khối lượng hóa chất


Submit solution

Points: 3
Time limit: 1.0s
Memory limit: 98M

Author:
Problem types
Allowed languages
Ada, Assembly, Awk, C, C++, C11, CLANG, CLANGX, Classical, COBOL, Coffee, CSC, D lang, DART, F95, FORTH, Fortrn, GAS32, GO, Haskell, Itercal, Java, kotlin, LEAN, LISP, LUA, MONOVB, Nasm, OCAML, Pascal, Perl, php, PIKE, prolog, Pypy, Python, Ruby 2, RUST, Scala, SCM, SED, SWIFT, TCL, TUR, V8JS, VB, ZIG

Một chất hữu cơ chỉ gồm các nguyên tố hóa học C,H,O có khối lượng phân tử tương ứng C=12, H=1, O=16.

Ví dụ Axit capric có công thức CH3-CH2-CH2-CH2-CH2-CH2-CH2-CH2-CH2-COOH ở dạng rút gọn CH3(CH2)8COOH

Bài toán đặt ra là cho một công thức ở dạng rút gọn bạn hãy tính khối lượng hóa chất đó biết rằng số rút gọn chỉ nằm trong khoảng [2,9].

Input

Dòng đầu là số trường hợp kiểm thử \(t (1 \le t \le 10)\)

Mỗi trường hợp kiểm thử là một xâu ký tự trên một dòng chỉ gồm các ký tự C,H,O, (, ) và các số trong đoạn [2,9] có độ dài không vượt quá 500 ký tự

Output

Với mỗi công thức tính khối lượng của hóa chất đó là số tự nhiên có giá trị không vượt quá \(10^9\) xuất ra trên từng dòng

Ví dụ:

Input

2
((CHOH)2(COOH)2H2O)4
CH3((CHCOOH)2(CH2)8CO2H)3H2CO3H

Output

672
897

Comments


  • -1
    kienduy1221  commented on Oct. 3, 2024, 2:29 a.m.

    include <iostream>

    include <stack>

    include <string>

    include <cctype>

    include <vector>

    using namespace std; int khoiluong(string &x){ stack <int> S;

    for(auto c:x){
        if(c=='C') S.push(12);
        else if(c=='H') S.push(1);
        else if(c=='O') S.push(16);
        else if(c=='(') S.push(0);
        else if(isdigit(c)){
            int coso= c- '0';
            S.top()=S.top()*coso;
        }
        else if(c==')'){
            int t=0;
            while(S.top()!=0){
                t=t+S.top();
                S.pop();
            }
            S.pop();
            S.push(t);
        }
    }
    
    int tong=0;
    while(!S.empty()){
        tong=tong+S.top();
        S.pop();
    }
    return tong;

    }

    int main(){ int n; cin>>n; cin.ignore(); vector<int> v; while(n!=0){ string x; getline(cin,x); v.push_back(khoiluong(x)); n--; } for(auto x:v){ cout<<x<<endl; }

    }