描述略
Sample Input
4
C
C6H5OH
NH2CH2COOH
C12H22O11
Sample Output
12.010
94.108
75.070
342.296
此题难在不知道字母后有几位数字
网上看到的处理办法是写一个函数处理数字部分
这里我采用从后往前计算的方法 比较繁琐 但不失为一种好思路
#include <stdio.h>
#include<string.h>
#include<cctype>
int main(int argc, char *argv[])
{
char str[100];
int kase;
double sum;
scanf("%d",&kase);
while(kase--)
{
int num=0,count=1;
scanf("%s",str);
sum=0;
int flag=1;//标记
for(int i=strlen(str)-1;i>=0;i--)//从后往前遍历
{
if(isalpha(str[i]))
{
if(flag==1)//如果字母后没有跟数字
{
switch(str[i])
{
case 'C':sum+=12.01;break;
case 'H':sum+=1.008;break;
case 'O':sum+=16.00;break;
case 'N':sum+=14.01;break;
default:break;
}
}
else //字母后有数字
switch(str[i])
{
case 'C':sum+=12.01*num;break;
case 'H':sum+=1.008*num;break;
case 'O':sum+=16.00*num;break;
case 'N':sum+=14.01*num;break;
default:break;
}
num=0;
count=1;
flag=1;//改变状态 不存在数字
}
if(isdigit(str[i]))
{
num+=count*((str[i]-'0'));//计算数字
count*=10;
flag=0;//改变状态 存在数字
}
}
printf("%.3f\n",sum);
}
return 0;
}