uva 1586 - Molar mass

本题为小紫书的57页第三题
主要在于判断字母还是数字,若为数字要连续读入整数,如果下一个还是数字 就要i++,如果不是就跳出循环。如果一个是字母下一个也为字母就需要当做把这个字母直接读入一个,要注意的就是最后一个如果是字母也要当做一个。

//    连续读入整数  直到不再为数字   先记下之前的字母 
#include
#include
#include
char s[100];
int main ()
{
	int T;
	scanf("%d",&T);
	while (T--)
	{
		scanf("%s",s);
		int i;
		int sum=0;
		double m=0,n=0;
		for(i=0;i='A'&&s[i]<'Z')   //if(isupper(s[i]))
			{
				char c;
				c=s[i];
				switch (c)
				{
					case 'C':
						n=12.01;break;
					case 'H':
						n=1.008;break;
					case 'O':
						n=16.00;break;
					case 'N':
						n=14.01;break;
				}
				sum=0;
		 	}
			while(isdigit(s[i]))
			{
				sum=sum*10+s[i]-'0';
				if(!isdigit(s[i+1]))
				{
					break;
				}
				else 
				i++;
			}
			if(sum!=0)
			m+=sum*n;
			else if(s[i+1]>='A'&&s[i+1]<='Z'||i==strlen(s)-1)          //else if(isupper(s[i+2])||i==strlen(s)-1)
			m+=n;
		}
		printf("%.3f\n",m);
	}
	return 0;
}

你可能感兴趣的:(小紫书,uva)