题目链接
主要考察对输入数据的处理。
每次用getchar()读入一个字符,若不为数字则直接读入下一个字符,若下一个字符也不为数字,则ans加入上一个字符对应的值;若读入的字符属于数字,则用sum累计,继续读入直到不为数字时,ans加入上个字符与数字乘积的值。这里用map是为了方便操作
#include <cstdio>
#include <map>
bool judge(char ch)
{
if (ch >= '0' && ch <= '9')return true;
return false;
}
int main()
{
int T;
scanf("%d",&T);
getchar();
std::map<char, double>m;
m['C'] = 12.01;
m['H'] = 1.008;
m['O'] = 16.00;
m['N'] = 14.01;
while (T--) {
char ch = getchar();
char data = ch;
double ans = 0;
while (ch != '\n') {
if (judge(ch)) {
int sum = ch - '0';
ch = getchar();
while (judge(ch)) { sum = sum * 10 + ch - '0'; ch = getchar(); }
ans += sum * m[data];
data = ch;
}
else {
ch = getchar();
if (!judge(ch)) { ans += m[data]; data = ch; }
}
}
printf("%.3lf\n", ans);
}
}