Ac完1585直接又做了,让计算原子量,循环相加就行,不难。但因为错把判断相等打成了‘=’,导致检查代码浪费了不少时间,睡的时候都过零点了,以后要注意这个问 题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| #include <stdio.h> #include <string.h> int main() { int T,i,j; double C,H,N,O,sum,k; C=12.01; H=1.008; O=16.00; N=14.01; scanf("%d\n",&T); for(i=0;i<T;i++) { sum=0; char a[82]; gets(a); for(j=0;j<strlen(a);j++) { k=0; if(a[j]=='C') { if(a[j+1]>48&&a[j+1]<58) { if(a[j+2]<48||a[j+2]>58) { k=C*(a[j+1]-48); sum+=k; } else { k=C*10*(a[j+1]-48)+C*(a[j+2]-48); sum+=k; } } else sum+=C; } if(a[j]=='H') { if(a[j+1]>48&&a[j+1]<58) { if(a[j+2]<48||a[j+2]>58) { k=H*(a[j+1]-48); sum+=k; } else { k=H*10*(a[j+1]-48)+H*(a[j+2]-48); sum+=k; } } else sum+=H; } if(a[j]=='O') { if(a[j+1]>48&&a[j+1]<58) { if(a[j+2]<48||a[j+2]>58) { k=O*(a[j+1]-48); sum+=k; } else { k=O*10*(a[j+1]-48)+O*(a[j+2]-48); sum+=k; } } else sum+=O; } if(a[j]=='N') { if(a[j+1]>48&&a[j+1]<58) { if(a[j+2]<48||a[j+2]>58) { k=N*(a[j+1]-48); sum+=k; } else { k=N*10*(a[j+1]-48)+N*(a[j+2]-48); sum+=k; } } else sum+=N; } if(a[j]>48&&a[j]<58) continue; } printf("%.3lf\n",sum); } return 0; }
|
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **