欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Molar Mass, ACM/ICPC Seoul 2007,UVa1586

程序员文章站 2022-06-09 16:58:57
...

Molar Mass, ACM/ICPC Seoul 2007,UVa1586
AC且在VS2019无警告代码:

#include <iostream>
#include <string>
#include <cctype>
#include <iomanip>
using namespace std;
double atom(char);
int main()
{
	int t;
	cin >> t;
	while (t-- > 0)
	{
		string s;
		cin >> s;
		double sum = 0, len = s.length();
		char pre = 0;//存储上一个元素
		for (int i = 0; i < len; ++i)
		{
			if (isalpha(s[i]))
			{
				sum += atom(s[i]);
				pre = s[i];
			}
			else if (isdigit(s[i]))
			{
				int num = s[i] - '0';
				while (isdigit(s[i + 1]))
				{
					num = num * 10 + s[++i] - '0';
				}
				sum += (static_cast<double>(num) - 1) * atom(pre);//-1是因为上一个元素已加进了总和中
			}
		}
		cout << fixed << setprecision(3);
		cout << sum << endl;
	}
}
double atom(char ch)
{
	if (ch == 'C')
		return 12.01;
	if (ch == 'H')
		return 1.008;
	if (ch == 'O')
		return 16.00;
	if (ch == 'N')
		return 14.01;
	return 0;
}
相关标签: 算法入门紫