您的位置:首页 > 其它

UVA1586 Molar Mass

2016-12-01 01:04 288 查看
描述略

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数学 思路