2018-10-21-20:52:38
原题链接
本题思路:将对应原子的相对分子质量存入常量数组,设置累加器,遍历字符串,若遇到字母则判断其后是否有数字,无数字直接给累加器加相应原子的相对分子质量,有数字则计算该原子的个数,之后给累加器加原子个数*原子的相对分子质量,当循环到字符串最后一位时循环结束。
1 #include <cstdio> 2 #include <cstring> 3 #include <string> 4 #include <iostream> 5 6 7 using namespace std; 8 double mass[256]; 9 10 int main() 11 { 12 memset(mass,0,sizeof(mass)); 13 mass['C']=12.01; 14 mass['H']=1.008; 15 mass['O']=16.00; 16 mass['N']=14.01; 17 int T; 18 cin>>T; 19 while(T--){ 20 string s; 21 cin>>s; 22 double Mass=0.0;//分子相对分子质量的累加器 23 for(int i=0;i<s.length();i++){ 24 if(mass[s[i]]){ 25 if(s[i+1]<'0'||s[i+1]>'9') 26 Mass+=mass[s[i]]; 27 else{ 28 int size=0,now=i+1; 29 while(s[now]<='9'&&s[now]>='0')//若下一个字符为字母则跳出循环 30 size=size*10+s[now++]-'0'; 31 Mass+=size*mass[s[i]]; 32 } 33 } 34 } 35 printf("%.3f\n",Mass); 36 } 37 return 0; 38 }