码迷,mamicode.com
首页 > 其他好文 > 详细

分子量(UVa1586)

时间:2018-06-25 21:47:49      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:turn   ble   col   font   cout   元素   org   std   4.0   

  题目具体描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=830&page=show_problem&problem=4461

C++11代码如下:

 1 #include<iostream>
 2 #include<string.h>
 3 #include<iomanip>
 4 using namespace std;
 5 #define maxn 85
 6 char s[maxn];
 7 
 8 int main() {
 9     int T;
10     cin >> T;
11     while (T--) {
12         int num_c = 0, num_h = 0, num_o = 0, num_n = 0;  //分别记录各个化学元素的个数
13         float sum = 0.0;
14         cin >> s;
15         int n = strlen(s);
16         s[n] = 1;
17         for (int i = 0; i < n; i++) {
18             if (isalpha(s[i])) {  //判断是否是字母
19                 switch (s[i]) {
20                 case C:if (isdigit(s[i + 1])) {  //判断字母后面2位是否为数字
21                             if (isdigit(s[i + 2])) num_c += (s[i + 1] - 0) * 10 + (s[i + 2] - 0);
22                             else num_c += (s[i + 1] - 0);
23                          }
24                          else num_c++; break;
25                 case H:if (isdigit(s[i + 1])) {
26                             if (isdigit(s[i + 2])) num_h += (s[i + 1] - 0) * 10 + (s[i + 2] - 0);
27                             else num_h += (s[i + 1] - 0);
28                          }
29                          else num_h++; break;
30                 case O:if (isdigit(s[i + 1])) {
31                             if (isdigit(s[i + 2])) num_o += (s[i + 1] - 0) * 10 + (s[i + 2] - 0);
32                             else num_o += (s[i + 1] - 0);
33                          }
34                          else num_o++; break;
35                 case N:if (isdigit(s[i + 1])) {
36                             if (isdigit(s[i + 2])) num_n += (s[i + 1] - 0) * 10 + (s[i + 2] - 0);
37                             else num_n += (s[i + 1] - 0);
38                          }
39                          else num_n++; break;
40                 default:break;
41                 }
42             }
43             else continue; //当前数组元素为数字,则直接进入下次循环
44         }
45         sum = 12.01*num_c + 1.008*num_h + 16.00*num_o + 14.01*num_n;
46         cout << fixed<<setprecision(3)<<sum << endl;  //小数点后面保留三位数字
47     }
48 
49     return 0;
50 }

分子量(UVa1586)

标签:turn   ble   col   font   cout   元素   org   std   4.0   

原文地址:https://www.cnblogs.com/pgzhang/p/9226237.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!