Molar mass Uva1586

题目:给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包括4中原子,分别为C、H、O、N,原子量分别为12.01,1.008,16.00,14.01(单位:g/mol)

例如:C6H5OH的分子量为94.108g/mol

 

我的思路:直接遍历,遇到数字统计后与前面的元素的摩尔质量相乘。

 

上代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define MAXN 100
 4 
 5 int findnum(const char* s,int p){
 6     int num=1;
 7     p++;
 8     if(s[p]>='0'&&s[p]<='9')
 9     num=int(s[p]-'0');
10     else return num;
11     while(p++){
12         if(s[p]>='0'&&s[p]<='9')
13         num=int(s[p]-'0')+num*10;
14         else
15             break;
16         
17     }
18     return num;
19 }
20 int main(){
21     int n;
22     scanf("%d",&n);
23     char s[MAXN];
24     while(n--){
25         
26         memset(s,NULL,sizeof(s));
27         scanf("%s",s);
28         int l=strlen(s);
29         double sum=0;
30         for(int i=0;i<l;i++){
31             if(s[i]>='0'&&s[i]<='9')//其实可以设置一个全局变量,在调用findnum()函数后直接跳过数字
32             continue;
33             if(s[i]=='C'){
34                 sum+=12.01*findnum(s,i);
35             }
36             else if(s[i]=='H'){
37                 sum+=1.008*findnum(s,i);
38             }
39             else if(s[i]=='O'){
40                 sum+=16.00*findnum(s,i);
41             }
42             else if(s[i]=='N'){
43                 sum+=14.01*findnum(s,i);
44             }
45         }
46         printf("%.3lf\n",sum);
47     }
48     return 0;
49 }

 

posted @ 2020-08-02 16:41  MurphyVan  阅读(82)  评论(0)    收藏  举报