关键在于判断数字是两位数还是单位数,其他部分没有难度。
#include"stdio.h" #include"string.h" #include"ctype.h" #define maxn 80 int main() { double a,b,sum; int T,m,i; char s[maxn]; scanf("%d",&T); while(T--) { scanf("%s",s); m=strlen(s); a=0; sum=0; for(i=0; i<m; i++) { if(isalpha(s[i])) //判断是否字母 { sum=sum+a*b; b=1; if((s[i])=='C') a=12.01; else if((s[i])=='H') a=1.008; else if((s[i])=='O') a=16.00; else if((s[i])=='N') a=14.01; } else if(isdigit(s[i])) //判断是否数字 { if(isdigit(s[i-1])) //如果前一位也是数字 b=b*10+s[i]-'0'; else //如果前一位不是数字 b=s[i]-'0'; } } printf("%.3f ",sum=sum+a*b); } return 0; }
参考书目:算法竞赛入门经典(第2版) 刘汝佳 编著