1942:番号変換
制限時間:1秒メモリ制限:32メガバイトの提出:2738解決:693
[ 送信 ] [ ステータス ] [ ウェブボード ]、[作成者:インポート]
説明
任意の二つの異なる非バイナリ変換負の整数(16進バイナリ)を見つけ、それが長い間に与えられた式の範囲内の整数であり得ます。
異なる16進数は、(0,1、...、9であり 、B、...、F) 、又は(0,1、...、9、A 、B、...、F) 。
入力
三つの整数、nは、Bを含む唯一のライン入力、。その後の進を表すnは整数であり、bはバイナリ整数Bに変換されることを望むものではN進整数を表します。A、Bは10進数、2 = <、B <= 16です。
出力
データの各セットのためのテストデータの複数のセットであってもよく、出力ラインを含み、ラインは、バイナリ整数bが変換されています。すべて大文字の出力シンボルは、すなわち、示される場合には(0,1、...、9、A、B、...、F)。
サンプル入力
4 123 10
サンプル出力
27
ヒント
文字列は、異なるストレージ16進を表します。
1の#include <stdio.hの> 2の#include < ストリング・H> 3 4 int型のmain(){ 5 int型A、B。 6 チャー S [ 40 ]。 7 一方(scanf関数(" %D%S%D "、および、sは、&B)=!EOF){ 8 INT LEN = STRLEN(S)。 9 // 将字符串转换成数值!!! 10 のために(INTを iは= 0 ; I <LEN; I ++ ){ 11 であれば(S [I]> = ' 0 ' && S [I] <=' 9 ')S [I] = S [I] - ' 0 ' 。 12 であれば(S [I]> = ' ' && S [I] <= ' F ')S [I] = S [I] - ' ' + 10 。 13 であれば(S [I]> = ' A ' && S [I] <= ' F ')S [I] = S [I] - ' A ' + 10 。 14 } 15 int型の和= 0、生成物= 1 。 用(INT I = len- 1 ; I> = 0 ; i-- ){ 17 合計=合計+(INT)S [I] * 製品。 18 製品=製品* 。 19 } 20 INT NUM = 0 。 21 // 初始化!!! 22 のmemset(S、0、はsizeof (S))。 23 であれば(B == 10 ){ 24 のprintf(" %dの\ n " 、合計)。 25 }他に{ 26 // 変換の素晴らしいモード!!! 図27は ん{ 28 IF(SUMの%のB < 10 ){ 29 S [NUM ++] = SUM%のB + ' 0 ' ; 30 } 他{ 31である S [NUM ++] = SUM%のB - 10 + ' A ' ; 32 } 33であります SUM / = B; 34である } ながら(!SUM = 0 ); 35 のために(int型私はnum- = 1 ; I> = 0 ; i-- ){ 36 のprintf(" %のC " 、S [I])。 37 } 38 のprintf(" \ n " ); 39 } 40 } 41 リターン 0 。 42 } 43 44 / * 45 //自己写的 46 空隙outPrintf(int型N){ 47 IF(N <10){ 48 のprintf( "%d個"、N) 49 }他{ 50 スイッチ(N){ 51 ケース10: 52 のprintf( "A")。 53 ブレーク; 54 ケース11: 55 のprintf( "B")。 56 ブレーク; 57 ケース12: 58 のprintf( "C")。 59 ブレーク; 60 ケース13: 61 のprintf( "D")。 62 ブレーク; 63 ケース14: 64 のprintf( "E")。 65 ブレーク; 66 ケース15: 67 のprintf( "F"); 68 ブレーク; 69 } 70 } 71 } 72 73 INT changeNum(チャーC){ 74 のint NUM。 75 IF(C == '0'){ 76 NUM = 0。 77 }そうIF(C == '1'){ 78 NUM = 1。 79 }そうIF(C == '2'){ 80 NUM = 2。 81 }そうIF(C == '3'){ 82 NUM = 3。 83 }そうIF(C == '4'){ 84 NUM = 4。 85 }そうなら(C == '5'){ 86 NUM = 5。 87 }そうIF(C == '6'){ 88 NUM = 6。 89 }そうIF(C == '7'){ 90 NUM = 7。 91 }そうIF(C == '8'){ 92 NUM = 8。 93 }そうIF(C == '9'){ 94 NUM = 9。 95 }そうIF(C == 'A' || C == 'A'){ 96 NUM = 10。 97 }そうIF(C == 'B' || C == 'B'){ 98 NUM = 11。 99 }そうIF(C == 'C' || C == 'C'){ 100 NUM = 12。 102 NUM = 13。 103 }そうIF(C == 'E' || C == 'E'){ 104 NUM = 14。 105 }そうでなければ{ 106 NUM = 15。 107 } 108 戻りNUM。 109 } 110 111 ボイドgetNum(CHAR S []、INT LEN、INT ANS []){ 112 のint NUM。 113 のための(I = 0 INT、J = LEN-1; I <LEN; I ++、J - ){ 114の ANS [I] = changeNum(S [J])。 115 } 116 } 117 118 メインINT(){ 119 int型A、B。 120 文字S [40]; // nは必ずしも0-9との間に本の数は、同様に、Aと表示されることがあります!これは、列記憶して必要である 121 ながら(!scanfの( "%D%S%D"、&A、S、&B)= EOF){ 122 、INTのANS [40] NUM; 123 INT LEN = STRLEN(S)、 124 (ANS lenをS)getNum; 125 のunsigned long long int型SUM = 0、商品= 1; 126 {(;私は<LEN I ++ INT I = 0)のための 127 SUM = SUM + ANS [I] *製品; 128 * A =商品の商品; 129 } 130 NUM = 0; 131である {行う 132 ; ANS [NUM ++] = SUMの%のB 133 SUM / = Bと、 134 }一方(和= 0!)。 135 のための(INT I = NUM-1; I> = 0; I - ){ 136 outPrintf(ANS [I])。 137 } 138 のprintf( "\ n"); 139 } 140 戻り0; 141 } 142 * /