Molar mass Uva1586
题目:给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包括4中原子,分别为C、H、O、N,原子量分别为12.01,1.008,16.00,14.01(单位:g/mol)
例如:C6H5OH的分子量为94.108g/mol
我的思路:直接遍历,遇到数字统计后与前面的元素的摩尔质量相乘。
上代码:
1 #include<stdio.h> 2 #include<string.h> 3 #define MAXN 100 4 5 int findnum(const char* s,int p){ 6 int num=1; 7 p++; 8 if(s[p]>='0'&&s[p]<='9') 9 num=int(s[p]-'0'); 10 else return num; 11 while(p++){ 12 if(s[p]>='0'&&s[p]<='9') 13 num=int(s[p]-'0')+num*10; 14 else 15 break; 16 17 } 18 return num; 19 } 20 int main(){ 21 int n; 22 scanf("%d",&n); 23 char s[MAXN]; 24 while(n--){ 25 26 memset(s,NULL,sizeof(s)); 27 scanf("%s",s); 28 int l=strlen(s); 29 double sum=0; 30 for(int i=0;i<l;i++){ 31 if(s[i]>='0'&&s[i]<='9')//其实可以设置一个全局变量,在调用findnum()函数后直接跳过数字 32 continue; 33 if(s[i]=='C'){ 34 sum+=12.01*findnum(s,i); 35 } 36 else if(s[i]=='H'){ 37 sum+=1.008*findnum(s,i); 38 } 39 else if(s[i]=='O'){ 40 sum+=16.00*findnum(s,i); 41 } 42 else if(s[i]=='N'){ 43 sum+=14.01*findnum(s,i); 44 } 45 } 46 printf("%.3lf\n",sum); 47 } 48 return 0; 49 }

浙公网安备 33010602011771号