题目就是计算分子量。
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,t,m;
float k,l,n;
char a[100];
scanf("%d",&t);
for(i=0;i<t;i++)
{
l=0;m=0;n=0;
scanf("%s",a);
for(j=0;j<strlen(a);j++)
{
l=0;
if(a[j]=='C')
k=12.01;
if(a[j]=='H')
k=1.008;
if(a[j]=='O')
k=16.00;
if(a[j]=='N')
k=14.01;
if((a[j]<'0'||a[j]>'9')&&(a[j+1]<'0'||a[j+1]>'9'))
l=k;
if ((a[j]>='0'&&a[j]<='9')&&(a[j+1]<'0'||a[j+1]>'9'))
{
l=(a[j]-'0')*k;
}
if((a[j]>='0'&&a[j]<='9')&&(a[j+1]>='0'&&a[j+1]<='9'))
{
l=k*((a[j]-'0')*10+a[j+1]-'0');
j++;
}
n=n+l;
}
printf("%.3f\n",n);
}
}
其实给我ac我是拒绝的。因为看了代码就知道这个只能算后面为两位数的分子量。
这个问题的难点就是如何把字母后面的数字乘上前面的原子量。如代码所示,用了一大堆if',我还会回来改改的。