Language: C++
/*
UVa 1586 - Molar mass
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_1586_Molar_mass.cpp
*/
#include <cstdio>
#include <cstdlib>
int main()
{
const int nr_chars_max = 80;
const double w_carbon = 12.01, w_hydrogen = 1.008, w_oxygen = 16.00,
w_nitrogen = 14.01;
int T;
scanf("%d", &T);
while (T--) {
char s[nr_chars_max + 1];
scanf("%s", s);
int carbon = 0, hydrogen = 0, oxygen = 0, nitrogen = 0;
for (char* p = s; *p; ) {
char* pe = p + 1;
if (*p == 'C' || *p == 'H' || *p == 'O' || *p == 'N') {
int n = strtol(p + 1, &pe, 10);
if (!n)
n = 1;
switch (*p) {
case 'C':
carbon += n; break;
case 'H':
hydrogen += n; break;
case 'O':
oxygen += n; break;
case 'N':
nitrogen += n; break;
}
}
p = pe;
}
double w = w_carbon * carbon + w_hydrogen * hydrogen + w_oxygen * oxygen +
w_nitrogen * nitrogen;
printf("%.3lf\n", w);
}
return 0;
}
No comments:
Post a Comment