8626 原子量计数
时间限制:1000MS 内存限制:1000K
提交次数:218 通过次数:89题型: 编程题 语言: G++;GCC
Description
给出一个化学原子式,仅含有C,H,O,N 四种元素,计算其总分子量。
例如,C6H5OH 的原子量为94.108g/mol,计算方法为:6 × (12.01 g/mol) + 6 × (1.008 g/mol) +1 × (16.00 g/mol).
输入格式
输入的第一行是数字T,表示输入文件含有T个CASE。之后有T行,每行有一个长度小于100 的字符串,表示要求的分子式。原子都用大写字母表示,没有括号,保证所有的式子都合法。
输出格式
输出每个式子的原子量。
输入样例
4CC6H5OHNH2CH2COOHC12H22O11
输出样例
12.01094.10875.070342.296
提示
来源
PKKJ @ 07 GIS 1
作者
admin
很简单的一道模拟题,代码不是很长,测试数据也并不坑人;直接上代码:
1 #include2 #include 3 #include 4 #include 5 6 //using namespace std; 7 8 int main() 9 { 10 int T; 11 char s[200]; 12 int i,j,k,c,o,h,n; 13 scanf("%d\n",&T); 14 for(i=0; i ='0'&&s[k]<='9') 29 while(s[k]>='0'&&s[k]<='9') 30 { 31 if(k>j+1) 32 temp=temp*10+s[k]-'0'; 33 else 34 temp+=s[k]-'0'; 35 k++; 36 } 37 else 38 temp++; 39 c+=temp; 40 } 41 42 else if(s[j]=='O') 43 { 44 k=j+1; int temp=0; 45 if(s[k]>='0'&&s[k]<='9') 46 while(s[k]>='0'&&s[k]<='9') 47 { 48 if(k>j+1) 49 temp=temp*10+s[k]-'0'; 50 else 51 temp+=s[k]-'0'; 52 k++; 53 } 54 else 55 temp++; 56 o+=temp; 57 58 } 59 else if(s[j]=='H') 60 { 61 k=j+1;int temp=0; 62 if(s[k]>='0'&&s[k]<='9') 63 while(s[k]>='0'&&s[k]<='9') 64 { 65 if(k>j+1) 66 temp=temp*10+s[k]-'0'; 67 else 68 temp+=s[k]-'0'; 69 k++; 70 } 71 else 72 temp++; 73 h+=temp; 74 75 76 } 77 else if(s[j]=='N') 78 { 79 k=j+1;int temp=0; 80 if(s[k]>='0'&&s[k]<='9') 81 while(s[k]>='0'&&s[k]<='9') 82 { 83 if(k>j+1) 84 temp=temp*10+s[k]-'0'; 85 else 86 temp+=s[k]-'0'; 87 k++; 88 } 89 else 90 temp++; 91 n+=temp; 92 93 94 } 95 } 96 double sum_c=12.010,sum_h=1.008,sum_o=16.000,sum_n=14.010; 97 double ans=c*sum_c+h*sum_h+o*sum_o+n*sum_n; 98 printf("%.3lf\n",ans); 99 }100 return 0;101 }
下面是另一种方法:
#include#include int check(int temp[],int n);int digit(char a);int main(){ int T; scanf("%d",&T); const double w_h=1.008,w_n=14.01,w_o=16.00,w_c=12.01; while(T--) { char a[105]; int i,j,num_h=0,num_n=0,num_o=0,num_c=0; double sum=0; scanf("%s",a); int alen=strlen(a); // { int temp[20]; for(i=0;i =0;i--) { sum+=temp[i]*m; m*=10; } return sum;}int digit(char a){ if(a<='9'&&a>='0') return 1; else return 0;}