题目链接:B - Molar mass
题目大意:计算化学式的相对原子质量 高中化学题
思路:水题 遍历字符串 我提前初始化了一个浮点数组 存储C H O N的相对原子质量 方便计算 难办的地方就是后面的原子数 1的时候不写 再就是多位数的情况 许多人会选择倒序遍历 我一开始也是这个方法 不过要计算字符串长度 为了优化 开辟了一个新方法(不知道有没有人用过) 用double型 因为小数是顺序输入 最后乘上小数位就OK 这样可实现顺序遍历 其他要注意的就是输出保留三位小数
代码如下:
#include
double mass[80];
void init()
{
mass['C']=12.01;
mass['H']=1.008;
mass['O']=16.00;
mass['N']=14.01;
}
int main()
{
int n,i,j;
char st[81];
double mm;
double k,x,z;
init();
scanf("%d",&n);
while(n--)
{
mm=i=0;
scanf("%s",st);
while(st[i]!=0)
{
k=0;
x=0.1;
z=1;
for(j=i+1;st[j]!=0&&st[j]>='0'&&st[j]<='9';j++)
{
k+=(st[j]-'0')*x;
x*=0.1;
z*=10;
}
if(j==i+1) k=1;
mm+=mass[st[i]]*k*z;
i=j;
}
printf("%.3lf\n",mm);
}
return 0;
}