第一篇博客
写代码的时候注意数组的初始化,本题是把数字也当成字符直接输入了,所以处理的时候数字和英文字符分开处理,本代码请注意变量m的使用,看似有两个for循环,但是有了变量m后,对字符串其实只处理了一次。
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(void)
{
char substance[85];
int T;
scanf("%d",&T);
while(T--)
{
double fw=0.0;
memset(substance,'A',sizeof(substance));
scanf("%s",substance);
int n=strlen(substance);
for(int i=0;i<n;i++)
{
int j=0,k,m=0;
for(k=i+1;!isupper(substance[k])&&k<n;k++)
{
j=j*10+substance[k]-48;
m++;
}
if(j==0) j=1;
if(substance[i]=='C') fw+=12.01*j;
else if(substance[i]=='N') fw+=14.01*j;
else if(substance[i]=='O') fw+=16.00*j;
else if(substance[i]=='H') fw+=1.008*j;
i=i+m;
}
printf("%.3f\n",fw);
}
return 0;
}