分子量——UVa1586

题意:给一串分子式只含(C H O N),求其相对分子质量。难点在于如何读入字符后的数字。

解题思路:
顺序读取字符,判断数字和字符。但是C,H,O,N字符没问题,数字是两位还是一位有点难搞。还有就是数字在后,字符在前有点烦。所以我选择了从后往前读,这样依次读取的数字刚好是下一个读取的字符的个数,而数字是一位还是两位我用一个计数器来检查。

#include <iostream>
#include <cstring>
using namespace std;
int main() {
    char a[80];
    double sum;
    int s,b[4],c=1,count=0;//count计数数字是两位(count=1)还是一位数(count=0)
                          //默认为一位(count=0)
    memset(b,0,sizeof(b));//c为默认的字符个数为1
    cin >> a;
    s=strlen(a);
    do{         //我们从后往前找
         if(a[s-1]=='C'){b[0]+=c;count=0;c=1;}//如果字符等于C,则将count和c重置
         else if(a[s-1]=='H') { b[1]+=c;count=0;c=1;}//同样的,如果命中字符就重置
         else if(a[s-1]=='O') { b[2]+=c;count=0;c=1;}
         else if(a[s-1]=='N') { b[3]+=c;count=0;c=1;}
         else if(count){c=(a[s-1]-'0')*10+c;count=0;} //如果count为1(两位数),c值的计算有变化
         else   {c=a[s-1]-'0';count++;}               //计算完count重置,这里不重置c是因为c是用来给下一个字符计算用的
    }while(s--);                                      //c用完了后就重置为1
    sum=b[0]*12.01+b[1]*1.008+b[2]*16.00+b[3]*14.01;
	cout  << "分子量为:" << sum << endl;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值