题目:计算分子量
纯净物都有一定的组成,可用一个相应的化学式来表示其组成成分。化学式是用元素符号表示物质组成及原子个数的式子。用化学符号表示物质分子的组成的化学式称为分子式,它的含义是:组成该化合物的元素,各元素原子数之比,各元素原子的重量之和。
化学式可以表示物质的1个分子,以及组成分子的元素种类和原子数量,如果要表示某物质的几个分子,可以在化学式前加上系数.标明该物质的分子数.如2个氧分子可用2O2表示,四氧化三铁可以用Fe3O4表示。
化学式的相对分子质量(简称分子量)是化学式中各原子的原子量的总和,即同种元素的相对原子质量与其原子个数相乘,不同原子的相对原子质量相加。例如:CO2, 碳是12, 氧是16, 那么,CO2分子量就是12+16×2=44 。
已知各化学分子式用到的元素原子量如下:
N |
C |
O |
Cl |
S4 |
H |
Al |
Ca |
Zn |
Na |
14 |
12 |
16 |
35 |
32 |
2 |
27 |
40 |
65 |
23 |
计算各分子式的分子量。
【标准输入】
第一行: T 表示T个分子式。接下来有T行,每行是一个分子式。
【标准输出】
对于每个分子式,输出占一行,一个整数,即对应的分子量。
【约束条件】
2≤T≤8 ,化学式的长度不超过38
【 样 例 】
标准输入 |
标准输出 |
4 CO2 H2Na2SO4 N(NO2)3 (NH4)2SO4 |
44 146 152 140 |
要求:1:不带括号的分子式求解
2:带一层括号的分子式求解
进一步要求:带一层括号的分子式求解
***********************************************************************************************
笔者水平不高,是标准小白,下面的代码只能赞赏不能吐槽!谢谢配合!
#include<cstdio>
#include<iostream>
#include<stack>
#include<cstdlib>
#include<string>
#include<string.h>
using namespace std;
int All(char s[]){
char s1[40];
int i=0,sum=0,tem=0;
while(s[i]!='\0'){
if(s[i]=='('){
int j=0;
i++;
while(s[i]!=')') s1[j++]=s[i++];
s1[j]=='\0';
i++;
tem = All(s1);
if('0'<s[i]&&s[i]<'9'){ tem = tem*(s[i]-'0'); i++; } //括号
}else if(s[i]=='C'){
if(s[i+1]=='l'){ tem=36; i=i+2;//Cl
}else if(s[i+1]=='a'){ tem=40; i=i+2;//Ca
}else{ tem=12; i++; }//C
if('0'<s[i]&&s[i]<'9'){ tem = tem*(s[i]-'0'); i++; }
}else if(s[i]=='N'){
if(s[i+1]=='a'){
tem=23;
i=i+2;
}else{
tem=14;
i++;
}
if('0'<s[i]&&s[i]<'9'){ tem = tem*(s[i]-'0'); i++; } //N Na
}else if(s[i]==79){
tem=16;
i++;
if('0'<s[i]&&s[i]<'9'){ tem = tem*(s[i]-'0'); i++; } // O
}else if(s[i]=='S'){
tem=32;
i++;
if('0'<s[i]&&s[i]<'9'){ tem = tem*(s[i]-'0'); i++; } // S
}else if(s[i]=='H'){
tem=2;
i++;
if('0'<s[i]&&s[i]<'9'){ tem = tem*(s[i]-'0'); i++; } // H
}else if(s[i]=='A'){
tem=27;
i++;i++;
if('0'<s[i]&&s[i]<'9'){ tem = tem*(s[i]-'0'); i++; } // Al
}else if(s[i]=='Z'){
tem=65;
i++;i++;
if('0'<s[i]&&s[i]<'9'){ tem = tem*(s[i]-'0'); i++; } //Zn
}
sum = sum+tem;
}
return sum;
}
int main(){
int T,x;
char s[40];
scanf("%d",&T);
while(T--){
scanf("%s",s);
printf("%d\n",All(s));
}
return 0;
}
感觉这个程序代码更像是一片作文,平淡的很~