UVA刷题方法:https://blog.csdn.net/richenyunqi/article/details/80990535#commentBox
【2019.3.24】
这是一道很奇怪的题,题中说输入数据只有字母和数字(估计还有换行符)
然而我写成下面这样是WA,(测例都过了,提交是WA)
if(isalpha(c))
...
else //理论上这种情况,c肯定是数字
...
改成下面这样就AC了,难道还有除了字母和数字的第三种?
if(isalpha(c))
...
else if(isdigit(c))
...
完整代码如下:
思路:
每遇到一个元素(字母)时,证明上一个元素的数量num已经得知,于是计算上一个元素的分子量,累加到mass中
每遇到一个数字时,计算上一个元素的数量num
遇到换行符时,证明最后一个元素的数量num已经得知,计算最后一个元素的分子量,累加到sum中
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cctype>
using namespace std;
double wei[30];
int main()
{
//freopen("C:\\Users\\summer\\Desktop\\output.txt", "w", stdout);
wei['C'-'A'] = 12.01;
wei['H'-'A'] = 1.008;
wei['O'-'A'] = 16.00;
wei['N'-'A'] = 14.01;
int T;
cin>>T;
getchar();
int num;
char c, ato;
double mass;
bool fir;
while(T--) {
fir = true;
while((c=getchar()) && c!='\n') {
if(isalpha(c)) {
if(fir) //如果是第一个元素,则清零
mass = 0;
else //如果不是,则计算并累加上一个元素的分子量
mass += wei[ato-'A'] * max(num, 1);
fir = false;
ato = c;
num = 0;
}
else if(isdigit(c)){ //这句要加上,不能直接写else
num = (num*10) + (c-'0');
}
}
mass += wei[ato-'A'] * max(num, 1); //加上最后一个元素的分子量
printf("%.3f\n", mass);
}
return 0;
}