首页 > 学院 > 开发设计 > 正文

Uva 1586 molar mass

2019-11-06 06:15:13
字体:
来源:转载
供稿:网友
#include <stdio.h>#include <string.h>#define maxn 81int main(){ int T; char s[maxn]; scanf("%d",&T); //C--0 H--1 O--2 N--3 double a[]={12.01,1.008,16.00,14.01}; while(T--){ memset(s,'S',sizeof(s)); scanf("%s",s); double molar=0.0; int len=strlen(s),sub=1,n=1; for(int i=len-1;i>=0;i--){ if(s[i]>='0'&&s[i]<='9'){ if(sub==1){ n=s[i]-48; sub++; } else{ n=(s[i]-48)*10+n; } } else if(s[i]=='C'||s[i]=='H'||s[i]=='O'||s[i]=='N'){ switch(s[i]){ case 'C':molar+=a[0]*n;n=1;sub=1;break; case 'H':molar+=a[1]*n;n=1;sub=1;break; case 'O':molar+=a[2]*n;n=1;sub=1;break; case 'N':molar+=a[3]*n;n=1;sub=1;break; default:break; } } } PRintf("%.3f/n",molar); } return 0;}

水题也可以磨叽这么久。自己真是弱菜啊。 逆序遍历是不是看起来怪怪的。所以我又整理了一下,试图让整个程序的逻辑看起来更清楚一些。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表