uva 1586 - Molar mass

本题为小紫书的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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值