原题网址:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=830&problem=4461&mosmsg=Submission+received+with+ID+16211692
字符串处理,需要注意数字和字母的分别对应处理....
#include<stdio.h>
#include<string.h>
char x[10005];
double m[105];
bool fun(char ch)//判断字母
{
if(ch>='A'&&ch<='Z')
{
return 1;
}
return 0;
}
void slove()
{
int len=strlen(x),i=0;
double sum=0;
for(int i=0;i<len;++i)
{
if((i==len-1)||fun(x[i])&&fun(x[i+1]))//判断边界和没有数字的情况
{
sum+=m[x[i]];
continue;
}
int num=0,k=i++;
while(i<len&&x[i]>='0'&&x[i]<='9')//否则就计算数字的具体值
{
num=num*10+x[i]-'0';
++i;
}
sum=sum+m[x[k]]*1.0*num;
--i;
}
printf("%.3lf\n",sum);
}
int main()
{
m['C']=12.01;m['H']=1.008;
m['O']=16.00;m['N']=14.01;
int t;
//freopen("shuju.txt","r",stdin);
scanf("%d",&t);
while(t--)
{
scanf("%s",x);
slove();
}
return 0;
}