i have solved the problem but my code look so brutal and i dont know how to use stack on it so the code might be more elegant.
anyone can help me on this?
thanks so much
#include <bits/stdc++.h>
using namespace std;
char chemical[101];
int MMAS(char* arr, int length){
int ret = 0;
int i = 0;
while (i<length) {
if(arr[i]=='C'){
i++;
if('2'<=arr[i] && arr[i]<='9'){
ret+= (arr[i]-'0')*12;
i++;
} else ret+=12;
} else if(arr[i]=='H'){
i++;
if('2'<=arr[i] && arr[i]<='9'){
ret+= (arr[i]-'0')*1;
i++;
} else ret+=1;
} else if(arr[i]=='O'){
i++;
if('2'<=arr[i] && arr[i]<='9'){
ret+= (arr[i]-'0')*16;
i++;
} else ret+=16;
} else if('2'<=arr[i] && arr[i]<='9') {
} else if(arr[i]=='('){
i++;
int j=i;
int left_brace = 1, right_brace = 0;
while(j<length){
if(arr[j]=='(') left_brace++;
if(arr[j]==')') right_brace++;
if(left_brace == right_brace) break;
j++;
}
if(left_brace==right_brace) {
if(j<(length-1) && '2'<=arr[j+1] && arr[j+1]<='9'){
ret+=MMAS(&arr[i],j-i)*(arr[j+1]-'0');
i = j+2;
}
else {
ret+=MMAS(&arr[i],j-i);
i = j+1;
}
} else {
}
} else break;
}
return ret;
}
int main(){
fill_n(chemical,101,NULL);
cin>>chemical;
int len = strlen(chemical);
cout<<MMAS(chemical,len);
return 0;
}