2010年2月25日 星期四

Problem 446 Kibbles `n' Bits `n' Bits `n' Bits,十六進位的運算

此題是要輸入兩個 16 進位的數,依照運算子做相加或相減的運算後,輸出以 2 進位顯示兩數,以 10 進位顯示運算結果。

首先宣告三個 char 以讀入所要使用的資料,如同以下程式碼:
char hexOne[4], hexTwo[4], op;
scanf("%s %c %s", hexOne, &op, hexTwo);

讀入後,我將它轉成 10 進位,使用兩個整數(h1、h2)接收:
sizeOne = strlen(hexOne), sizeTwo = strlen(hexTwo);
int h1 = 0, h2 = 0, i, k, sum = 0;
for (i = sizeOne - 1, k = 1; i >= 0; i --, k *= 16)
h1 += wordJudge(hexOne[i]) * k;
for (i = sizeTwo - 1, k = 1; i >= 0; i --, k *= 16)
h2 += wordJudge(hexTwo[i]) * k;

wordJudge 函式:
int wordJudge(char hex)
{
if (hex == 'A') return 10;
else if (hex == 'B') return 11;
else if (hex == 'C') return 12;
else if (hex == 'D') return 13;
else if (hex == 'E') return 14;
else if (hex == 'F') return 15;
else return (hex - '0');
}

接著使用函式將它轉成 2 近位後輸出:
void printBinary(int n)
{
int i;
for (i = 4096; i >= 1; i /= 2)
if (n / i) printf("%d", n / i), n %= i;
else printf("0");
}

至於判斷加或減,又怎麼輸出,就交給你們去寫了。

By David.K

p446題目連結
回ACM題庫目錄
回首頁

沒有留言: