Chinaunix首页 | 论坛 | 博客
  • 博客访问: 77024
  • 博文数量: 32
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 284
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-26 14:00
个人简介

有梦想的人,正在努力

文章分类

全部博文(32)

文章存档

2015年(32)

我的朋友

分类: C/C++

2015-06-04 22:29:13

发现从后往前扫描字符串会更方便。

  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>

  4. const double Hydrogen = 1.008;
  5. const double Oxygen     = 16.00;
  6. const double Carbon = 12.01;
  7. const double Nitrogen = 14.01;

  8. double p(int);

  9. int main()
  10. {
  11.     int t;
  12.     char molecule[85];
  13.     scanf("%d", &t);
  14.     getchar();
  15.     while(t--)
  16.     {
  17.         double mass = 0;
  18.         double tm;
  19.         scanf("%s", molecule);
  20.         int len = strlen(molecule);
  21.         int digit = 0;
  22.         double num = 0;
  23.         while(len--)
  24.         {
  25.             if(isdigit(molecule[len]))
  26.             {
  27.                 ++digit;
  28.                 num += (int)(molecule[len] - '0') * p(digit);
  29.                 continue;
  30.             }
  31.             else if('C' == molecule[len]) tm = Carbon;
  32.             else if('H' == molecule[len]) tm = Hydrogen;
  33.             else if('O' == molecule[len]) tm = Oxygen;
  34.             else if('N' == molecule[len]) tm = Nitrogen;

  35.             if(!digit) num = 1;
  36.             mass += tm * num;
  37.             digit = 0;
  38.             num = 0;
  39.         }
  40.         printf("%.3lf\n", mass);;
  41.     }
  42.     return 0;
  43. }

  44. double p(int digit)
  45. {
  46.     int i;
  47.     double sum = 1;
  48.     for(i = 1; i < digit; ++i)
  49.         sum *= 10;
  50.     return sum;
  51. }


阅读(738) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~