题目连接
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;
}