UVA - 1586 Molar mass
2017-08-28 13:28
267 查看
//收获:运用isdigit()函数,解决了元素后面的原子个数可能有两位的情况。同时,每次遇到元素字母,计数工作都由函数完成,简化代码 //值得一提的是,这题后来又被我写了一次,充分利用了数组之间的一一对应,减少了许多代码...简洁许多啦! //借鉴了下面blog的部分思路: http://blog.csdn.net/u014800748/article/details/32718177#include <iostream>#include <cstring>#include <iomanip>#include <cctype>using namespace std;const int maxn = 200;char s[maxn];void getnumber(char*s, int i, int &a){if ( isdigit(s[i + 1]) && isdigit(s[i + 2]) )a += (s[i + 1] - '0') * 10 + (s[i + 2] - '0');elsea += (isdigit(s[i + 1]) ? (s[i + 1] - '0') : 1);}int main(){int t;cin >> t;while (t--){cin >> s;int len = strlen(s), a[4];double mass[4] = { 12.01, 1.008, 16.00, 14.01 }, sum = 0;char element[4] = { 'C', 'H', 'O', 'N'};memset(a, 0, sizeof (a));for (int i = 0; i < len; i++){// if (s[i] == 'C')// getnumber(s, i, a[0]);//// else if (s[i] == 'H')// getnumber(s, i, a[1]);//// else if (s[i] == 'O')// getnumber(s, i, a[2]);//// else if (s[i] == 'N')// getnumber(s, i, a[3]);for (int j = 0; j < 4; j++)if (s[i] == element[j]){getnumber(s, i, a[j]);continue;}}for (int i = 0; i < 4; i++)sum += (mass[i] * a[i]);cout << fixed << setprecision(3) << sum << endl;}return 0;}
相关文章推荐
- UVa 1586 Molar mass
- UVA 1586 ----Molar mass
- UVA - 1586 Molar mass
- UVA-1586 Molar Mass
- Uva - 1586 - Molar mass
- Molar Mass, ACM/ICPC Seoul 2007, UVa 1586
- UVA 1586 Molar mass
- 小紫书 习题 3-2(UVA 1586) 分子量(Molar mass)
- UVa-1586 - Molar mass:simple
- Uva1586 - Molar mass
- UVA 1586 ----Molar mass
- UVA 1586 分子量(Molar Mass)
- UVa1586 - Molar mass还是画流程图思路清晰
- UVa 1586 - Molar mass
- Problem 008——UVa 1586 - Molar mass
- Uva - 1586 - Molar mass
- UVa - 1586 - Molar mass(char s[n];scanf("%s",s);)
- UVa 1586 Molar mass --- 水题
- UVa 1586 - Molar Mass - ACM/ICPC Seoul 2007 - C语言
- UVa1586 Molar mass