UVA 1586モル質量(分子量)

説明ボボが高い教育達成者を風刺決していい子で、彼は最近、自分自身を救い出すことができない化学を勉強甘やかさ。しかし、分子の相対分子質量は彼女が飽き作る計算するので、彼女は彼女がそのような面倒なことを計算するのに役立つプログラムを書くことをお願いすることにしました。

既知の:
炭素の相対原子質量を①C12.01表され、水素の相対原子質量をH 1.008で表される、酸素の相対原子質量はO 16.00、N 14.01で表される窒素元素の相対原子質量で表されます。 。
②分子と相対原子質量の全ての原子からなる分子に等しい相対分子量:例えば、として式C6H5OH分子の分子量:1.008 + 12.01 * 6 * 5 = 94.108 + 1.008 + 16.00。第一の入力整数n、次式のN個の代表的存在です。

次のn行、各ラインは、文字列式を有します。90以上ではないことを確実にするために、文字列のデータ長。
式中、C、H、O、Nのみ可能な文字の4種類。
式中、文字を表す各要素番号が表示されることがあり、これらの数字は100以上1未満としないではありません。
別々の行に彼の相対分子量、小数点以下3桁(%の.3lf)の各入力および出力するための出力。サンプル入力
4 
C 
C6H5OH 
NH2CH2COOH 
C12H22O11
サンプル出力
12.010 
94.108 
75.070 
342.296 


解答:
書式#include <iostreamの>
の#include <CStringの>
の#include <cstdioを>
使用して名前空間std;
文字S = '\ n'は、
読み取りINT()
{
    S = GETCHAR()。
    IF(S < '0' || S> '9')リターン1。
    INT X = 0。
    一方、(S> = '0' && S <= '9')
    {
        X = X * 10 + S-'0' 。
        S = GETCHAR()。
    }
    Xを返します。
}
int型のmain()
{
    二重のANS = 0。
    int型のn;
    
    scanf関数( "%のD"、&N);
    以下のために(; iがn = <; iは1 = int型私は++)
    {
        一方(S == '\ n')S = GETCHAR()。

        {
            IF(S == 'C')ANS + = 12.01 *読み出します()。
            (S == 'H')場合ANS + = 1.008 *読み出します()。
            (S == 'O')場合ANS + = 16 *リード()。
            IF(S == 'N')ANS + = 14.01 *読み出します()。
        }
        のprintf( "%3LFする\ n"、ANS)。
        ANS = 0;
    }    
    0を返します。
}

おすすめ

転載: www.cnblogs.com/satans/p/11108761.html