当前位置:   article > 正文

uva1586分子量(Molar Mass,ACM/ICPC Danang 2007)

uva1586分子量(Molar Mass,ACM/ICPC Danang 2007)
  1. #include<iostream>
  2. #include<string>
  3. #include<iomanip>
  4. using namespace std;
  5. int main() {
  6.     int t;
  7.     cin >> t;
  8.     while (t--) {
  9.         double C = 12.01, H = 1.008, O = 16.00, N = 14.01;
  10.         double z;
  11.         int w;
  12.         double sum = 0.0;
  13.         char x[100];
  14.         cin >> x;
  15.         for (int i = 0; x[i]; i++) {
  16.             if (x[i] == 'C') {
  17.                 z = C;
  18.             }
  19.             else if (x[i] == 'H') {
  20.                 z = H;
  21.             }
  22.             else if (x[i] == 'O')
  23.             {
  24.                 z = O;
  25.             }
  26.             else if (x[i] == 'N') {
  27.                 z = N;
  28.             }
  29.             if ((x[i + 1] - '0') > =1 && (x[i + 1] - '0' <= 9)) {
  30.                 w = x[i + 1] - '0';
  31.                 i++;
  32.                 if ((x[i + 1] - '0') >= 1 && (x[i + 1] - '0') <= 9) {
  33.                     w = w * 10 + (x[i + 1] - '0');
  34.                     i++;
  35.                 }
  36.             }
  37.             else { w = 1; }
  38.             sum += w * z;
  39. }
  40.         cout << fixed << setprecision(3) << sum << endl;
  41.     }
  42.         return 0;
  43. }

也是改了小两天,然后说一下核心代码逻辑两大块的核心

第一个是有四个字母然后把for循环中匹配到的字母进行确认到z里面后面进行

第一大逻辑

第二的大逻辑就行下面的if那个三大判断条件第一个是一位数并且是大于1的小于10的

x然后是大于10的就是二位数

第三个就是没有数字的就是1的

然后代码具体要考虑i++每次进行i++自动i++这样避免算完字母后碰到数字然后会多算一次字母。就是一位算数字后i++如果【i+2】就是匹配到两位数的话再次i++;这样可以有效避免数字越界(你可以好好思考一下)如果都没有就是1直接定义1即可。好了没了感谢观看。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/990038
推荐阅读
相关标签
  

闽ICP备14008679号