学校アルゴリズムの仕事(5) - バイナリ(超水問題)を決定します

  非常に落ち着き午後は、今日は先生の日ですが......ネットワーク評価システムに取得していないが、私は先生とうんざりしています。配置は真剣に対象を見ていなかったので、リスニングでレッスンを感じない理由はありません。私はそれが非常に面倒なことだろうと思った、と水の問題が道路であることがわかった......

ここでのトピックは、(ネットは確かにペンシルベニア州で、今問題がない)であります

  私を許して、容易にカット図:

  

  この質問は、フロントが第三の数と等しくない乗り上げバンドにナンセンスの多くの対象であり、文句や不満を、白はあなたに3つの数字を与えることであると言って、あなたがしようとして(2〜16)と他の二つ。データは非常に小さいので、ので、直接暴力IT /

アイデアについての講演:

  このバイナリによれば、それぞれ、バンドBを選択することは、P、Q、Rの小数に変換されるであろう。その後、裁判官は保持しています。最小Bが所望の結果であるように、この式は有効です。

 

  次に、この一環として、システムの変換に書き込まれましたか?変換のためのいくつかの典型的な基地の我々曲が見るために:

   二進化十進数

    方法:
    (右下として)、0 2 0番目の重量は、第2の重み値ように2のべき乗である、そして、ビット2進数がローからハイに計算されます。すべてのバイナリ1が0と1で表される数値を使用してバイナリ、バイナリ数です。
   例えば、10進数(1100100)Bに変換します

最初のビット0 0×2 ^ 0 = 0 、 
ビット1 0×2 ^ 1 = 0 、 
ビット2 1×2 ^ 2 = 4、
ビット3 0×2 ^ 3 = 0 、 
ビット4 0×2 ^ 4 = 0、
ビット5、1×2 ^ 5 = 32 ; 
ビット6、1×2 ^ 6 = 64 ; 

読み取り、結果の値を加算し、0 + 0 + 0 + 0 + 4 + 32 + 64 = 100すなわち(1100100)B =(100) D.

  

  小数進転送
   方法:
    8のn乗の重みを有する、ローからハイに、バイナリ計算と同様に、第1の重み値が1〜8のパワーであり、0は0番目の重み8ビットように。進数字を表現するために8つの数字を使用して0から7まで進数に毎8です。
   小数のO、例えば、(144)

ビット0 4×8 ^ 0 = 4、
ビット1 4×8 ^ 1 = 32 ; 
第2号1×8 ^ 2 = 64; 

測定値は、結果値が追加され、+ 32 = 100 + 64 4、すなわち、 (144)O =(100) D.

  

  10進数16進数の転送
   方法:
    ローからハイに、バイナリ計算と同様、16のn乗の重みとは、ビット0が16の0番目の重み、1〜16の加重値でありますその上、電力、および。すべて1、0123456789ABCDEF 16進数ヘクスに16。
   小数に例えば、(64)H

ビット0~4×16 ^ 0 = 4、
ビット1~6×16 ^ 1 = 96 ; 

読み取り、結果の値が追加され、4 + 96 = 100、すなわち、(64)H =(100) D.

  それは実際には、あなたは、いわゆるバイナリ変換を次に加え、自分の体重を乗じて各位置にカウントすることで読み、慎重でしょう、非常に奇妙な感じ、ではありません。ここでは、プロトタイプのコードが出てきたのです

私は以下のコードを貼り付けます:

  書くことができ、あなたは自分のアイデアを記述する必要があり

ロング変換(CHAR * STR、INTのB)
{ 
    int型 RES = 0 ; 

    のためint型 I = 0を、STR [I] =!' \ 0 ' ;私は++ 
    { 
        IF(STRは、[I] - ' 0 ' > = B )// しかし、B以上で直接リターン見出さ
        {
             リターン - 1 ; 
        } 
        RES * = ; B 
        RES + STR = [I] - ' 0 ' ; 
    } 
    リターン解像度; 
}
進変換

  変換のために、このコア基は、書込みサイクル、非常に単純な終了2ヘクス20からトピックは、その後、2から20までのループを書き込むビン、この判定を行う、上記の関数を呼び出すと述べました。

コードを貼り付けます。

  

する#include <stdio.hの>
 に#define DEBUG 0     長い変換(チャー *のSTR、INTのB)。INT のmain()
{ int型N、B。
    チャー P [ 8 ]、Q [ 8 ]、R [ 8 ]。
    長いDecimalp、Decimalq、Decimalr。
    scanf関数(" %のD "、&N)
    一方、(N-- 
    { 
        scanf関数(" %S%S%S "、&​​P、およびQ&R)。
        以下のためのint型 I = 2




    ; 私は= < 20I ++ 
        { 
            Decimalp = 変換(P、I)。
            Decimalq = 変換(Q、I)。
            Decimalr = 変換(R、I)。
#ifのデバッグ
            のprintf(" %D%D%D \ n " 、Decimalp、Decimalq、Decimalr)。
#endifの // 
            もし(Decimalp == - 1 || Decimalq == - 1 || Decimalrの== - 1 続けますもし(Decimalp * Decimalq == Decimalr)
            {
                printf(" %d個の\ nを" 、i)は、
                破ります; 
            } 
            B = I。
        } 

        もし、(B == 20 
        { 
            のprintf(" 0の\ n " ); 
        } 
    } 
    戻り 0 
} 

長い変換(チャー *列str、int型B)
{ 
    int型 RES = 0 

    以下のためのint型私= 0 [i]のをstr =;!"\ 0 " ; 私は++ 
    { 
        場合 - (STR [i]が' 0 ' > = B)
        { 
            リターン - 1 
        } 
        RES * =のB。
        RES + = STR [I] - ' 0 ' #ifのデバッグ
        のprintf(" %d個の\ n " 、RES)。
#endifの
    } 
の#ifデバッグ
    のprintf(" の\ n " );
#endifの
    返却解像度を。
}
完全なコード

 

時点で、自分の、オープンな外観を書くことを覚えておいて、忘れないでください

 

おすすめ

転載: www.cnblogs.com/daker-code/p/11499113.html