题目:给出一个只包含4种原子,分别为C,H,O,N,求分子量。原子量分别为12.01, 1.008, 16.00, 14.01.例如C6H5OH的分子量为94.108
分析:1.该题难点在于判断元素下标的提取(需要判断得知下标多少位数)。
2.看过其他博客也有同样题目的解析,只是鄙人觉得不够全面,因为其无法满足元素下标3位数或更高位数。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#define maxn 100
char s[maxn];
int num(char* b,int q) //num函数用来计算元素下标的数值
{
int tot=1;
int digit=0;
int p=q;
while(1)
{
if(!isdigit(b[p]))break;
tot++;
p++;
}
for(int i=0;i<tot-1;i++)
{
digit+=(b[q+i]-'0')*pow(10,i);
}
if(digit==0)digit=1;
return digit;
}
int sum(int* c,double* r) //sum函数用来计算分子量
{
double tot=0;
for(int i=0;i<4;i++)
{
tot+=c[i]*r[i];
}
return tot;
}
int main()
{ int T;
double arr[]={12.01,1.008,16.00,14.01};
scanf("%d",&T);
while(T--){
scanf("%s",s);
int n=strlen(s);
int a[4];
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)
{
if(s[i]=='C')
{
a[0]+=num(s,i+1);
}
if(s[i]=='H')
{
a[1]+=num(s,i+1);
}
if(s[i]=='O')
{
a[2]+=num(s,i+1);
}
if(s[i]=='N')
{
a[3]+=num(s,i+1);
}
}
double ans=sum(a,arr);
printf("%.3f\n",ans);
}
return 0;
}