算法竞赛入门经典java UVA1586

现给你若干个分子式需要你求分子量。

例如:C6H5OH的分子量为12.016+1.0085+16.00+1.008=94.108g/mol。

思路:主要是循环,先看是否为'A'、'C'、'H'、'O'、其中一个,是则返回对应的数值。再判断后面的值是否还是字母或是数字 ,再分别分析情况。

 


import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int m=in.nextInt();
while(m-- > 0){
	double sum=0.0;
	int i=0;
	String s=in.next();
while(i<s.length()){
sum+=f(c(s.charAt(i)), i, s);
i++;
}
System.out.printf("%.3f\n",sum);
}
}
private static double f(double d,int i,String s) {
int k=0;
double sum=0.0;
while(i<s.length()-1&&s.charAt(i+1)>'0'&&s.charAt(i+1)<='9')
{
k=k*10+s.charAt(i+1)-'0';
i++;
}
if(k==0) {//当字母后面没有数字时
sum+=d;
}
else {//当字母后面有数字时
sum+=d*k;
}
return sum;
}

private static double c(char c) {
// TODO Auto-generated method stub
switch(c) {
case 'C':return 12.01;
case 'H':return 1.008;
case 'O':return 16.00;
case 'N':return 14.01;
}
return 0;
}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值