Molar mass UVA - 1586
阿新 • • 發佈:2018-11-06
#include <stdio.h> #include <ctype.h> const double C = 12.01; const double H = 1.008; const double O = 16.00; const double N = 14.01; double molar(); double panduan(char); int main() { int T; scanf("%d", &T); while (getchar() != '\n') continue; while (T--) { printf("%.3lf\n", molar()); } return 0; } double molar() { double sum = 0.0, yuanzi = 0.0; char c; int shi = 0, ge = 0; bool flag = false; while ((c = getchar()) != '\n') { if (isalpha(c)) { yuanzi = panduan(c); sum += yuanzi; flag = true; } else if (isdigit(c)) { if (flag) { ge = (c - 49); sum += yuanzi * ge; flag = false; } else { sum -= yuanzi * ge; shi = ge + 1; ge = (c - 49); sum += yuanzi * (shi*10 + ge); } } } return sum; } double panduan(char c) { if (c == 'C') return C; else if (c == 'H') return H; else if (c == 'O') return O; else return N; }