UVa 1586 C++ 【数组和字符串】 Molar mass

求相对分子量,我做复杂了。。。
思路是判定到元素CHON就加上单个的原子量,如果后面跟着数字,肯定是大于1的,所以就算出数字是多少,假设是k,然后用数字前邻接的原子量*(k-1),减一是因为在识别出元素符号时已经加了一次单个原子量了。
问题:在处理以数字结尾的分子式时,最后结尾处的数组指针跟前面的数字处理不同,要向前指一位。一开始没发现这个问题,所以耽误了好多时间。。。

#include <iostream>
#include <cstdio>
#include <string.h>
#include <cmath>
#define maxn 1010
using namespace std;
//
int main()
{
    int n;
    char a[85];
    cin>>n;
    while(n--){
        cin>>a;
        int len = strlen(a);
        double ans = 0.0;
        int temp,x=0,k=0;
        for(int i=0;i<len;i++){
            if(a[i]>='1'&&a[i]<='9'){
                x++;
                if(i!=len-1) continue;
            }
            if(x!=0){
            //printf("X----%d\n",x);
            for(int j=1;j<=x;j++){
                if(i!=len-1)
                k += (a[i-j]-'0')*pow(10,j-1);
                else k += (a[i-j+1]-'0')*pow(10,j-1);
            }
            if(i!=len-1){
            if(a[i-x-1]=='C') ans += 12.01*(k-1);
            if(a[i-x-1]=='H') ans += 1.008*(k-1);
            if(a[i-x-1]=='O') ans += 16.00*(k-1);
            if(a[i-x-1]=='N') ans += 14.01*(k-1);
            }
            if(i==len-1){
            if(a[i-x]=='C') ans += 12.01*(k-1);
            if(a[i-x]=='H') ans += 1.008*(k-1);
            if(a[i-x]=='O') ans += 16.00*(k-1);
            if(a[i-x]=='N') ans += 14.01*(k-1);
            }
            }
            //printf("K----%d\n",k);
            k=0;
            x=0;
            if(a[i]=='C') ans += 12.01;
            if(a[i]=='H') ans += 1.008;
            if(a[i]=='O') ans += 16.00;
            if(a[i]=='N') ans += 14.01;

        }
        printf("%0.3f\n",ans);
        }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值