Page 57
题意:给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子:C,H,O,N,原子量分别为12.01,1.008,16.00,14.01.
Sample Input
4 C C6H5OH NH2CH2COOH C12H22O11
Sample Output
12.010 94.108 75.070 342.296
//要把最后一个字符的属性单独考虑
#include
#include
#include
#include
#include
using namespace std;
#define max 105
char s[max];
int main(){
//freopen("in.txt","r",stdin);
int t;
double a[100];
a['C']=12.01;a['H']=1.008;a['O']=16.00;a['N']=14.01;
scanf("%d",&t);
while(t--){
scanf("%s",s);
int i=0,cnt=0;
double ans=0;
char tran[100];
memset(tran,0,sizeof(tran));
while(s[i]!=0){
if(isalpha(s[i])){
tran[cnt]='\0';
ans+=a[s[i-cnt-1]]*atoi(tran);
//注意是i-cnt-1
//大部分原子量的计算都在这一步
cnt=0;
if(s[i+1]==0||isalpha(s[i+1])) ans+=a[s[i]];//最后一个字符是字母的话,这种原子就只有一个,直接加上原子量就行了
}
else {
tran[cnt++]=s[i];
if(s[i+1]==0) {
//如果最后一个字符是数字,接下来就要加上这个原子的总原子量
//但是由于s[i+1]='\0',所以i++后就退出while循环了,也就不能执行line 24计算原子量了,所以要特别考虑
tran[cnt]='\0';
ans+=a[s[i-cnt]]*atoi(tran); //注意是i-cnt
}
}
i++;
}
printf("%.3lf\n",ans);
}
return 0;
}