题目的意思:计算相对分子质量。
下面的是AC的代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
double C = 12.01, H = 1.008, O = 16.00, N = 14.01;
int main()
{
int t;
char str[100];
while(cin >> t)
{
while(t--)
{
cin >> str;
int length = strlen(str);
int num = 0;
double ans = 0.0;
for(int i = 0; i < length; )
{
num = 0;
if(str[i] == 'C')
{
i++;
int flag = 0;
while(!(str[i] >= 'A' && str[i] <= 'Z') && str[i] != '\0')
{
num = num * 10 + str[i] - '0';
i++;
flag = 1;
}
if(flag)
ans += C * num;
else
ans += C;
}
else if(str[i] == 'H')
{
i++;
int flag = 0;
while(!(str[i] >= 'A' && str[i] <= 'Z') && str[i] != '\0')
{
num = num * 10 + str[i] - '0';
i++;
flag = 1;
}
if(flag)
ans += H * num;
else
ans += H;
}
else if(str[i] == 'O')
{
i++;
int flag = 0;
while(!(str[i] >= 'A' && str[i] <= 'Z') && str[i] != '\0')
{
num = num * 10 + str[i] - '0';
i++;
flag = 1;
}
if(flag)
ans += O * num;
else
ans += O;
}
else if(str[i] == 'N')
{
i++;
int flag = 0;
while(!(str[i] >= 'A' && str[i] <= 'Z') && str[i] != '\0')
{
num = num * 10 + str[i] - '0';
i++;
flag = 1;
}
if(flag)
ans += N * num;
else
ans += N;
}
}
printf("%.3lf\n", ans);
}
}
return 0;
}