16進位制的簡單運算(迴圈)

夜闌優琿發表於2020-11-05

題目:

問題 E: 16進位制的簡單運算(迴圈)
時間限制: 1 Sec  記憶體限制: 128 MB
提交: 579  解決: 354
[提交][狀態][討論版]
題目描述
現在給你一個16進位制的加減法的表示式,要求用8進位制輸出表示式的結果。

輸入
第一行輸入一個正整數T(0<T<100000)
接下來有T行,每行輸入兩個數和一個加號或者一個減號,且表示式合法並且所有運算的數都小於31位

輸出
每個表示式輸出佔一行,輸出表示式8進位制的結果。

樣例輸入
3
29+4823
18be+6784
4ae1-3d6c
樣例輸出
44114
100102
6565

程式碼塊:

#include <stdio.h>

int main(void)
{
    int i, t;
    int a, b;
    char c;
    scanf("%d", &t);
    for(i=0; i<t; i++)
    {
        scanf("%x%c%x", &a, &c, &b);
        if('+'==c)
            printf("%o\n", a+b);
        else
            printf("%o\n", a-b);
    }
    return 0;
}

題解:本題中輸入的是兩個十六進位制數相加或相減的字串,使用scanf輸入時明顯會遇到一些問題,首先對於scanf和printf,其整型十六進位制的格式控制為%x或%X,整型八進位制格式控制%o,整形十進位制為%d,無符號整型十進位制為%u,其次scanf在讀輸入的字串時,應該人為用各種格式控制將其中不同含義和型別的字元區分開,如這裡輸入的本質是一個十六進位制整數加一個運算字元加另一個十六進位制整數,在這裡中間的運算字元可能為加可能為減因此要用%c控制,而如果這裡只有加號的情況就無需%c了,直接用+就行。格式控制的意義即在於處理“字串中的某個部位可能出現多種同一類的字元,而不是確定的出現某個字元”的情況。

相關文章