1. 程式人生 > >uva 1586

uva 1586

本題為小紫書的57頁第三題
主要在於判斷字母還是數字,若為數字要連續讀入整數,如果下一個還是數字 就要i++,如果不是就跳出迴圈。如果一個是字母下一個也為字母就需要當做把這個字母直接讀入一個,要注意的就是最後一個如果是字母也要當做一個。
//    連續讀入整數  直到不再為數字   先記下之前的字母 
#include<stdio.h>
#include<string.h>
#include<ctype.h>
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<strlen(s);i++)
		{
			if(s[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;
}