课后题--------求分子量-----Molar mass------

简单的化学式  求分子量问题 下面附上  代码和解析.

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<string.h>
 4 #include<math.h>
 5 using namespace std ;
 6 int main()
 7 {
 8     double l,m,n,t,sum,w;
 9     int i,q;
10     char a[200];
11     scanf("%lf",&t);
12     while(t--)
13     {
14         w=m=0;
15         scanf("%s",a);
16         l=strlen(a);
17         for(sum=i=0;i<l;i++)
18         {
19             q=n=0;
20             if(!(a[i]-‘0‘>=0&&a[i]-‘0‘<=9))  //当  这次不是数字     越界的时候 也不是数字哦.
21             {
22                 if(a[i]==‘C‘)
23                 m=12.01;
24                 else
25                     if(a[i]==‘H‘)
26                 m=1.008;
27                 else
28                     if(a[i]==‘O‘)
29                 m=16;
30                 else
31                     if(a[i]=‘N‘)
32                 m=14.01;
33                 n=1;                            //用于处理    当这个化学元素没有后缀时的情况
34             }
35             if(a[i+1]-‘0‘>=0&&a[i+1]-‘0‘<=9)    //有后缀时.
36             {
37                 i++;
38                 n=0;
39                 while(a[i]-‘0‘>=0&&a[i]-‘0‘<=9)
40                 {
41                     n=n*pow(10,q)+(a[i]-‘0‘);
42                     q++;
43                     if(!(a[i+1]-‘0‘>=0&&a[i+1]-‘0‘<=9))
44                         break;
45                     i++;
46                 }
47             }
48             sum=sum+m*n;
49         }
50         printf("%.3lf\n",sum);
51     }
52     return 0;
53 }
时间: 2024-10-05 12:05:07

课后题--------求分子量-----Molar mass------的相关文章

【OI】计算分子量 Molar mass UVa 1586 题解

题目:(由于UVa注册不了,还是用vjudge) https://vjudge.net/problem/UVA-1586 详细说明放在了注释里面.原创. 破题点在于对于一个元素的组合(元素+个数),只有3种可能: 1.单个元素 2.一个元素和一位数字 3.一个元素和两位数字 没有了.因为题设交代了n<=99,表明个数只能为2位数.分别判断即可. /* Copyright 2019 AlexanderZ.Tang Molar_mass.cpp For UVa 1586 https://cnblog

分子量(Molar Mass,ACM/ICPC Seoul 2007,UVa 1586)

#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){ char s[20]; scanf("%s", s); double sum = 0; for (int i = 0; i < strlen(s); i++) { if (s[i] == 'C') sum += (s[i + 1] - 48) * 12.01; if (s[i] == 'H') { if (s[i +

UVa 1586 Molar mass --- 水题

UVa 1586 题目大意:给出一种物质的分子式(不带括号),求分子量.本题中分子式只包含4种原子,分别为C.H.O.N, 原子量分别为12.01,1.008,16.00,14.01 解题思路:先实现一个从字符型的数到整型的数的转换函数,再将输入的串从头到尾扫描,遇到字母,则进一步扫描后面的数字的区间, 再调用函数进行转换,再乘以其的原子质量,最后累加到sum中即可. /* UVa 1586 Molar mass --- 水题 */ #include <cstdio> #include <

UVa 1586 / UVALive 3900 Molar mass (字符串)

Molar mass Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description An organic compound is any member of a large class of chemical compounds whose molecules contain carbon. The molar mass of an organic compo

UVA1586 UVALive3900 Molar mass

Regionals 2007 >> Asia - Seoul 问题链接:UVA1586 UVALive3900 Molar mass.基础练习题,用C++语言编写程序. 这个问题是根据分子式,求分子量. 原子量使用map表来存储,所以用C++来编程. 程序中,使用函数getchar()处理输入流,需要更高的编程技巧. AC的C++语言程序如下: /* UVA1586 UVALive3900 Molar mass */ #include <iostream> #include <

uva 1586 - Molar mass

在想更好的处理方法,现在却只能有这个糟烂的代码了--不好意思 #include<stdio.h> #include<string.h> #include<iostream> using namespace std; const int maxn=200; char s[maxn]; double ans[maxn]; int get_num(int pos,int len) { int temp; for(int i=pos;i<len;i++) { if(s[i

《算法导论》读书笔记--第三章函数的增长 课后题

本章的课后题看一下即可,比较平凡. 3.1渐近记号 引用一下别人的答案,非常感谢: 原文地址:http://www.cnblogs.com/timebug/archive/2010/03/25/1694286.html |概念回顾| 当输入规模大到使只有运行时间的增长量级有关时,就使在研究算法的渐进效率. 几个重要渐进记号的定义: Θ(g(n))={ f(n): 存在正常数c1,c2和n0,使对所有的n>=n0,有0<=c1g(n)<=f(n)<=c2g(n) } O(g(n))=

C++ Primer 第五版 部分课后题答案

当时刚学C++的时候买了这本书,一开始前面看的一知半解,索性就先缓缓,等学完学校的C++课程(中途自己也写了不少c++的代码),一段时间之后又拿起这本书去看,感觉还是挺有滋味的,这本书对我印象中的C++做了很大的扩展,个人认为这本书不太适合刚学C++就去看,而是写了一定的代码,对C++有一个大体的了解之后再去看会很有味道.在看书的过程中自己也写了上面的课后练习题,现在整理一下,也跟大家分享一下,下面是9~12 15~16章的课后题编程题的答案 (第八章之前的都没保存/(ㄒoㄒ)/~~): 当时保

课后题3,4

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 练习2 { class Program { static void Main(string[] args) { //输入3个数,将这三个数从大到小排列打印出来: Console.Write("请输入第一个数:"); int a =Convert .ToInt32 (Console.ReadLine