刘汝佳《算法竞赛入门经典(第2版)》习题3-2 分子量计算(Uva1586)

本文主要介绍了分子量计算这道习题的解答。

一、习题3-2简介

在这里插入图片描述

在这里插入图片描述

 

二、解答

代码如下:

#include<stdio.h>
#include<string.h>
#include<ctype.h> //isdigit函数的头文件,用于判断字符是否为'0'~'9' 

int cnt(char*s, int i){
	int n = 0;
	if(isdigit(s[i+1]) && isdigit(s[i+2])){
		n+=(s[i+1]-'0')*10+(s[i+2]-'0');
	}
	else{
		n+=isdigit(s[i+1])?(s[i+1]-'0') : 1;
	}
	return n; 
}
 
int main(){
	double w[4]={12.01,1.008,16.00,14.01};//用于存储C、H、O、N的Mr
	double sum;
	int num[4];//用于统计各元素的个数 
	char s[85];
	int T;
	scanf("%d",&T);
	while(T--){
		sum=0; //注意置零 
		memset(num,0,sizeof(num));//注意置零 
		
		scanf("%s",s);
		
		for(int i=0;i<strlen(s);i++){
			if(s[i]=='C')	num[0]+=cnt(s,i);
			if(s[i]=='H')	num[1]+=cnt(s,i);
			if(s[i]=='O')	num[2]+=cnt(s,i);
			if(s[i]=='N')	num[3]+=cnt(s,i);
		}
		for(int i=0;i<4;i++)
			sum+=(w[i]*num[i]);
		printf("%s的分子量为:%.3lfg/mol\n",s,sum);
	}
	return 0;
}


三、总结

以上就是本文的内容,本题易错点是的是元素个数为1时在分子式中缺省,且C、H、O、N四种元素的个数均可能为两位数(2≤n≤99)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值