UVA 1586 Molar mass
题意:输入字符串求分子量,例如C2H2,CHO2CH,C23H22O11
思路:将输入的字符切割,从左往右依次计算,比如CH22O2,
先计算C,发现下一个不为数字,那么C的个数肯定为1,直接计算;
H22,先提取元素H,然后提取出22,遇到O,说明提取结束,个数为22;
O11同上。
注意:提取多位数就是原数*10+新提取的数的循环
1 #include "stdio.h" 2 #include "stdlib.h" 3 #include "string.h" 4 int main() 5 { 6 int n,i,j,ex,tag,beishu; 7 float sum,res,weight; 8 char str[80],name,num; 9 scanf("%d",&n); 10 while(n--) 11 { 12 sum=0,weight=0,res=0,num=1; 13 ex=0,tag=0,beishu=1,res=0; 14 scanf("%s",str); 15 for(i=0;i<=strlen(str);i++) 16 { 17 if(!(str[i]<='9'&&str[i]>='0'))//字母 18 { 19 20 res=res+sum*weight; 21 weight=0,sum=0; 22 name=str[i]; 23 switch (name) 24 { 25 case 'C': 26 { 27 weight=12.01; 28 break; 29 } 30 case 'H': 31 { 32 weight=1.008; 33 break; 34 } 35 case 'O': 36 { 37 weight=16.00; 38 break; 39 } 40 case 'N': 41 { 42 weight=14.01; 43 break; 44 } 45 default: break; 46 } 47 if(!(str[i+1]<='9'&&str[i+1]>='0'))//CH 48 { 49 sum=1; 50 } 51 } 52 else 53 if(str[i]<='9'&&str[i]>='0') 54 { 55 // printf("str[i]=%d\n",str[i]-'0'); 56 num=str[i]-'0'; 57 // printf("num=%d\n",num); 58 sum=sum*10+num; 59 // printf("\tsum=%.3f\n",sum); 60 } 61 // else //if(str[i+1]!='\0') 62 // { 63 // num=1; 64 // sum=sum+weight*num; 65 // } 66 } 67 printf("%.3f\n",res); 68 } 69 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步