2011年8月11日 星期四

d379: 446 - Kibbles `n' Bits `n' Bits `n' Bits

內容 :
    一個很疲倦的程式設計師正在設計一支程式可以同時讀入兩個十六進位的數字,將它們相加或相減後以十進位表示法輸出。同時,這兩個十六進位數字的二進位表示法也必須輸出,就像下面sample output的格式一樣。
    這位程式設計師很樂意自己完成這個普通的小程式,但是當他試著做基底2的轉換時,他卻突然感染了麻疹。所以如果你願意幫他完成這支小程式,他會非常地感謝你。
    你可以假設以下條件總是成立:
    在讀入的十六進位數字中最大不超過FFF。
執行減法運算時第二個數字永遠比第一個數小,也就是說,運算結果不會是負的。
空白字元在整個輸入檔中會以統一格式出現,也就是說每行的開頭不會有空白字元,在個數字及運算元之間會有一空白字元。(請參考sample input)

輸入說明 :
    這個題目的輸入來自一個由下列格式組成的檔案:
    N (代表有N個運算式要計算)
    十六進位1 (+ 或 -) 十六進位2 (第一個運算式))
    .
    .
    .
    十六進位1 (+ 或 -) 十六進位2 (第 N 個運算式)

輸出說明 :
    輸出檔必須遵守以下格式:
    二進位1 (+ 或 -) 二進位2 = 十進位 (第一個運算結果)
    .
    .
    .
    二進位1 (+ 或 -) 二進位2 = 十進位 (第 N 個運算結果 )

範例輸入 :
2
A + 3
AAA + BBB

範例輸出 :
0000000001010 + 0000000000011 = 13
0101010101010 + 0101110111011 = 5733

提示 :
* 中文翻譯:Lucky 貓
C/C++
可以直接用%x 輸入,讀入16進位數

出處 :
Uva 446 (管理:morris1028)

程式碼 :
#include<stdio.h>

void bin(int num)
{
    int i,b[13]={0};
    for(i=0; num!=1 && i<13; i++)
    {
        b[i] = num % 2;
        num = num / 2;
    }
    b[i] = num;
    for(i=12; i>-1; i--)
        printf("%d",b[i]);
}

int main()
{
    int i,n,a,b;
    char op;
    
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        scanf("%x %c %x",&a,&op,&b);
        bin(a);
        printf(" %c ",op);
        bin(b);
        if(op == '+')
            printf(" = %d\n",a+b);
        else
            printf(" = %d\n",a-b);
    }
    return 0;
}
http://zerojudge.tw/ShowProblem?problemid=d379

沒有留言:

張貼留言