zoukankan      html  css  js  c++  java
  • UVa1586 分子量

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

    思路:

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

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

    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
    ", 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
    ", num[k]);
    52                 }
    53                 num[k] = '';
    54                 xishu = StringToNum(num);    
    55                 Weight += CharToWeight(s[i]) * xishu;
    56                 i = j-1;
    57             }
    58         }
    59         printf("%.3f
    ", Weight);
    60         --n;
    61     }
    62 }
  • 相关阅读:
    微软开源全新的文档生成工具DocFX
    .NET平台微服务项目汇集
    谷歌发布的首款基于HTTP/2和protobuf的RPC框架:GRPC
    Microsoft开源跨平台的序列化库——Bond
    Oracle job procedure
    Windows10
    移动端Reactive Native轮播组件
    PHP完整环境搭建
    Webpack 入门
    git 提交
  • 原文地址:https://www.cnblogs.com/patrolli/p/11170835.html
Copyright © 2011-2022 走看看