#include<stdio.h>
#include<string.h>
char a[50];
int isd(int i,int len){
int sum=0,t,e,s;
if(a[i]>'1' && a[i]<='9') {e=a[i]-'0';i++;}
else e=1;
for(;a[i]!='+' && i<len;i++){
if(a[i]=='O') s=16;
if(a[i]=='S') s=32;
if(a[i]=='H') s=2;
if(a[i]<='9' && a[i]>'1') s=(a[i]-'0'-1)*s;//s已经加过一次,故减一
if(a[i]=='A') { s=27; i++;}
if(a[i]=='Z') {s=65;i++ ;}
if(a[i]=='N') {
if(a[i+1]=='a'){s=23;i++;}
else s=14;
}
if(a[i]=='C'){
if(a[i+1]=='l'){s=35;i++;}
else if(a[i+1]=='a'){s=40;i++;}
else s=12;
}
//return s;
if(a[i]=='(') {
s=0;//处理括号问题,与上面的非括号一样,可以用一个调用函数实现节省空间
for(i=i+1;a[i]!=')' && i<len;i++){
if(a[i]=='O') t=16;
if(a[i]=='S') t=32;
if(a[i]=='H') t=2;
if(a[i]<='9' && a[i]>'1') t=(a[i]-'0'-1)*t;//s
if(a[i]=='A') {t=27;i++; }
if(a[i]=='Z') {t=65;i++; }
if(a[i]=='N') {
if(a[i+1]=='a'){t=23;i++;}
else t=14;
}
if(a[i]=='C'){
if(a[i+1]=='l'){t=35;i++;}
else if(a[i+1]=='a'){t=40;i++;}
else t=12;
}
s+=t;
}
}
sum+=s;
}
return sum*e;
}
int main(){
int i,n,len;
scanf("%d",&n);
while(n--&&scanf("%s",&a)){
int q;
len=strlen(a);
for(i=0;i<len;i++){
if(a[i]=='=') {
q=isd(i+1,len);
break;
}
}
printf("%04d\n",q);
}
return 0;
} /*
3
2C+O2=2CO
2NaOH+H2SO4=Na2SO4+2H2O
Ca2CO3+H2O=Ca2(OH)2+CO2 */
挑战密室 nyoj 1236 acm
最新推荐文章于 2018-05-11 12:22:52 发布