题目描述: 现给你若干个分子式需要你求分子量。
例如:C6H5OH的分子量为12.016+1.0085+16.00+1.008=94.108g/mol。
(ps:数字为数字前面元素的下标,所有分子式均无括号例如:2OH=2*16.00+1.008)
输入输出格式
输入:
输入n(2<=n<=99)
接下来n行为分子式
输出:
输出每个分子的分子式
源代码:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
int t;
scanf("%d",&t);
char ch = getchar();
while(t--)
{
char s[10000];
int a;
int i = 0;int j = 0;double x = 0.0;double sum = 0.0;int cnt = 0; int q = 0;
while((a = getchar())!='\n')
{
s[i] = a;
i++;
}
for(int y = 0;s[y]>='0' && s[y]<='9';j = y)//判断化学式前面有没有数字
{
q = q*10 + (s[y] - '0');
y++;
}
while(j<i)
{
cnt = 0;
if(j+1<i)//判断是不是最后一位字符
{
switch(s[j])
{
case 'C':
x = 12.01;
break;
case 'H':
x = 1.008;
break;
case 'O':
x = 16.00;
break;
case 'N':
x = 14.01;
break;
}
if(s[j+1]>='0' && s[j+1]<='9')//判断下一位是不是数字
{
int k = 0;
for( k = j+1;k<i;k++)//再往下判断下一位是不是数字
{
if(s[k]>='0' && s[k]<='9')
{
cnt = cnt*10 + (s[k]-'0');
}
else
{
break;
}
}
j = k;
sum = sum + x*cnt;
continue;
}
else//不是数字直接加起来
{
sum = sum + x;
j = j+1;
continue;
}
}
switch(s[j])//最后一位字符的处理
{
case 'C':
x = 12.01;
break;
case 'H':
x = 1.008;
break;
case 'O':
x = 16.00;
break;
case 'N':
x = 14.01;
break;
}
sum = sum + x;
break;
}
if(q==0)
{
printf("%.3f\n",sum);
}
else
{
printf("%.3f\n",sum*q);
}
}
return 0;
}