Molar mass UVA - 1586(读清题目事半功倍啊哈)

题目:

求相对分子质量,无括号仅包含CHON四种元素和表示某原子个数的数字[1~99],元素相对原子质量已给出

收获:

这个题虽然比较水,但对我来说收获不小(读者不感兴趣可自行跳过):
几个月前第一次做,犹豫处理的时候是“从前往后还是从后往前呢?” 引发这个疑问是因为我按照从前往后做WA了,后来改成从后往前居然过了???
带着这个疑问调试了好久,发现是字符判断出了问题… 简单的 isalpha OR isdigit 就可以解决,当时不会呀!
取而代之写了个"ch<60" 然后就挂掉了…其实理论上是行得通的,但是WA了我也很苦恼,索性吸取教训严谨起来。
再一个是第一次把题目想麻烦了,整了80多行,后来一读题发现数字不可能超过两位数,也没有括号啥的 T T…
好吧我接受了,这样就简单多了

思路:

只处理字母,然后判断后面是否跟着数字,无则元素个数+1,有则元素个数+k,然后把数字都跳过就好啦
代码如下(用到sscanf)

#include <cstdio>
#include <iostream>
#include <string>
using namespace std;

int main() {
	string s;
	int T; cin >> T;
	while (T--) {
		cin >> s;
		int C = 0, H = 0, O = 0, N = 0;
		for (int i = 0; i < s.length(); i++) {
			if (isdigit(s[i])) continue;//数字跳过
			int k = 1;//有数字+k,无数字+k(k == 1)
			if (isdigit(s[i+1]))  sscanf(&s[i+1], "%d", &k);

			if (s[i] == 'C') C += k;
			if (s[i] == 'H') H += k;
			if (s[i] == 'O') O += k;
			if (s[i] == 'N') N += k;
		}
		printf("%.3lf\n", C*12.01 + H*1.008 + O*16.00 + N*14.01);
	}
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值