首页 > 其他 > 详细

UVa1586 分子量

时间:2019-07-11 16:50:43      阅读:112      评论:0      收藏:0      [点我收藏+]

题目描述:根据分子式来计算其摩尔质量

技术分享图片

思路:

字母后面的数字表示了它的系数,读入整个字符串,因此需要判断每个字符是字母还是数字。

题意很明确,就是根据这个分子式来计算摩尔质量,需要注意的地方是:

1.若一个字母后面跟着的是字母或者该字母后面没有更多的字符,那么其系数为1,直接加上就OK

2. 如果字母后面是数字,那么就一直读取这个数字的各个位数,然后将这个字符表示的数转换为十进制的数,即为当前字母的系数,乘上单个分子质量后加在总的上就行。

代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <ctype.h>
 4 float CharToWeight(char ch)
 5 {
 6     float Weight;
 7     switch(ch){
 8         case C: 
 9             Weight = 12.01;
10             break;
11         case N:
12             Weight = 14.01;
13             break;
14         case O:
15             Weight = 16.00;
16             break;
17         case H:
18             Weight = 1.008;
19             break;
20     }
21     return Weight;
22 }
23 
24 int StringToNum(char s[])
25 {
26     int num = 0, xishu = 1;
27     for(int i = strlen(s) - 1; i >= 0; --i){
28         //printf("%c\n", s[i]);
29         num += (s[i]-0) * xishu;
30         xishu *= 10;
31     }
32     return num;
33 }
34 
35 int main()
36 {
37     int n;
38     char s[100];
39     scanf("%d", &n);
40     while(n > 0){
41         scanf("%s", s);
42         float tmpWeight = 0.0, Weight = 0.0;
43         int xishu = 1, i = 1, j, k;
44         char num[100];
45         for(i = 0; i < strlen(s); ++i){
46             if(i + 1 == strlen(s) || isalpha(s[i+1])){  //如果后面是字母或者到达最后 
47                 Weight += CharToWeight(s[i]);
48             }else{   //如果后面是数字 
49                 for(k = 0, j = i+1; j < strlen(s) && isdigit(s[j]); ++j,++k){  //把连续的数字都找出来 
50                     num[k] = s[j];
51                 //    printf("%c\n", num[k]);
52                 }
53                 num[k] = \0;
54                 xishu = StringToNum(num);    
55                 Weight += CharToWeight(s[i]) * xishu;
56                 i = j-1;
57             }
58         }
59         printf("%.3f\n", Weight);
60         --n;
61     }
62 }

 

UVa1586 分子量

原文:https://www.cnblogs.com/patrolli/p/11170835.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!