《算法竞赛入门经典2ndEdition 》习题3-2 得分(Molar Mass, Uva1586)

来源:互联网 发布:做flash的软件 编辑:程序博客网 时间:2024/05/29 04:13

用了isdigit() isalpha() 后还是比较简单的。

#include <cstdio>#include <cstring>#include <cctype>using namespace std;const int maxn = 80;char s[maxn + 10];double f(char);int main(){       int t;  scanf("%d", &t);  while(t--)  {    double ans = 0;    scanf("%s", s);    int len = strlen(s);    for(int i = 0; i < len; )    {      if(isalpha(s[i]))      {        double base = f(s[i]), num = 0;        while(isdigit(s[++i]))        {          num *= 10;          num += s[i] - '0';        }        if(num == 0) ans += base;        else ans += base * num;      }    }    printf("%.3f\n", ans);  }  return 0;}double f(char ch){  const double c = 12.01, h = 1.008, o = 16.00, n = 14.01;  switch(ch)  {    case 'C': return c;    case 'H': return h;    case 'O': return o;    case 'N': return n;  }}
1 0