UVA 1586 Molar mass

题意:输入字符串求分子量,例如C2H2,CHO2CH,C23H22O11

思路:将输入的字符切割,从左往右依次计算,比如CH22O2,

先计算C,发现下一个不为数字,那么C的个数肯定为1,直接计算;

H22,先提取元素H,然后提取出22,遇到O,说明提取结束,个数为22;

O11同上。

注意:提取多位数就是原数*10+新提取的数的循环

复制代码
 1 #include "stdio.h"
 2 #include "stdlib.h"
 3 #include "string.h"
 4 int main()
 5 {
 6     int n,i,j,ex,tag,beishu;
 7     float sum,res,weight;
 8     char str[80],name,num;
 9     scanf("%d",&n);
10     while(n--)
11     {
12         sum=0,weight=0,res=0,num=1;
13         ex=0,tag=0,beishu=1,res=0;
14         scanf("%s",str);
15         for(i=0;i<=strlen(str);i++)
16         {
17             if(!(str[i]<='9'&&str[i]>='0'))//字母
18             {
19 
20                 res=res+sum*weight;
21                 weight=0,sum=0;
22                 name=str[i];
23                 switch (name)
24                 {
25                 case 'C':
26                     {
27                         weight=12.01;
28                         break;
29                     }
30                 case 'H':
31                     {
32                         weight=1.008;
33                         break;
34                     }
35                  case 'O':
36                     {
37                         weight=16.00;
38                         break;
39                     }
40                  case 'N':
41                     {
42                         weight=14.01;
43                         break;
44                     }
45                 default: break;
46                 }
47                 if(!(str[i+1]<='9'&&str[i+1]>='0'))//CH
48                 {
49                     sum=1;
50                 }
51             }
52            else
53            if(str[i]<='9'&&str[i]>='0')
54             {
55 //                printf("str[i]=%d\n",str[i]-'0');
56                 num=str[i]-'0';
57 //                printf("num=%d\n",num);
58                 sum=sum*10+num;
59 //                printf("\tsum=%.3f\n",sum);
60             }
61 //            else //if(str[i+1]!='\0')
62 //            {
63 //                num=1;
64 //                sum=sum+weight*num;
65 //            }
66         }
67         printf("%.3f\n",res);
68     }
69 }
复制代码

 

posted @   付玬熙  阅读(153)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
主题色彩