nyoj 1236 挑战密室

题目连接
v写了好几天了,每次都感觉写的挺对的但是结果还是有误,郁闷,后来才明白计算机算啊不是人算,里面那个数字老是乘错地方 比如Na2SO4 Na要乘2 O乘4 然而仅管知道但开始写的时候出错,S也会乘4
附上AC代码,写繁琐了些

#include<stdio.h>
#include<string.h>
char str[50];
int main()
{
    int T,i,len,s,sum,m,n;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s",str);
        len=strlen(str);
        for(i=0;i<len;i++)
        {//先找到'='的位置
            if(str[i]=='=') 
            {
                i++;
                break;  
            }
        }
        sum=s=0;
        if(str[i]>='2'&&str[i]<='9')
        {//得到化学计量数 
            n=str[i]-'0';
            i++;
        }
        else n=1;
        for(;i<len&&str[i]!='+';i++)
        {//得到相对分子质量 
            if(str[i]=='N')
            {
                if(str[i+1]=='a') {m=23; i++;}
                else m=14;
            } 
            if(str[i]=='C')
            {
                if(str[i+1]=='l') {m=35; i++;}
                else if(str[i+1]=='a') {m=40;i++;}
                else m=12;
            } 
            if(str[i]=='O') m=16;
            if(str[i]=='S') m=32;
            if(str[i]=='H') m=2;
            if(str[i]=='A') {m=27;i++;}
            if(str[i]=='Z') {m=65;i++;}
            i++;
            if(str[i]>'1'&&str[i]<='9') m=(str[i]-'0')*m;
            else i--;
            if(str[i]=='(')
            {
                i++;
                while(str[i]!=')')
                {
                    if(str[i]=='N')
                    {
                        if(str[i+1]=='a') {m=23; i++;}
                        else m=14;
                    } 
                    if(str[i]=='C')
                    {
                        if(str[i+1]=='l') {m=35; i++;}
                        else if(str[i+1]=='a') {m=40;i++;}
                        else m=12;
                    } 
                    if(str[i]=='O') m=16;
                    if(str[i]=='S') m=32;
                    if(str[i]=='H') m=2;
                    if(str[i]=='A') {m=27;i++;}
                    if(str[i]=='Z') {m=65;i++;}
                    i++;
                    if(str[i]>'1'&&str[i]<='9') m=(str[i]-'0')*m;
                    else i--;
                    i++;
                    s=s+m;
                }
                m=s;//为了防止括号后还有数字 例Ca2(OH)2 
            }
            sum=sum+m;
        }
        sum=sum*n;
        printf("%04d\n",sum);   
    }   
    return 0;
} 
发布了46 篇原创文章 · 获赞 19 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/thwwu/article/details/79242443