【刘汝佳书】习题3-2 UVA1586

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值