EOJ 3037 十六進製制加法

2021-10-03 06:19:01 字數 2072 閱讀 1277

hhhhh我又回來了,發現乙個學期都沒寫部落格了嗷【捂臉

現在回想起來其實還是有很多可寫的內容的,比如計網實驗、作業系統改pintos、linux課後作業……還有這個寒假去杭州參加的google innocamp!(吹爆!)

害,值得寫的東西固然有很多,但不寫只有乙個理由:懶

不過,慵懶如我還是抵不住被困在家的閒,最近打算更新一波~ 大部分應該是記錄最近做到的還不錯的oj題。如果寫嗨了可能會寫點別的也說不定。

單點時限: 2.0 sec

記憶體限制: 256 mb

請編寫程式實現兩個十六進製制整數的加法。

例如:十六進製制整數 3762 和 05c3,3762+05c3=3d25

十六進製制整數 cb9 和 957,cb9+957=1610

輸入格式

第 1 行:乙個整數 t (1≤t≤10) 為問題數。

接下來 t 行,每行輸入兩個十六進製制整數 n 和 m (n,m 為不超過 200 位的十六進製制整數),a~f 全部為大寫字母。 兩個整數之間用乙個空格分隔。

輸出格式

對於每個問題,輸出一行問題的編號(0 開始編號,格式:case #0: 等)。然後對應每個問題在一行中輸出兩個十六進製制整數相加的結果,字母全部用大寫字母。

樣例

input

33762 05c3

cb9 957

f 1output

case #0:

3d25

case #1:

1610

case #2:

10設定兩個字元陣列儲存兩個加數;

因為兩個數相加是末位對齊,而用字元陣列存的兩個加數(下標對齊的話)是首位對齊,運算的時候鼓搗下標應該挺麻煩,所以兩個陣列各一遍迴圈把其中內容分別放到兩個棧裡,末位在棧頂;

設定乙個表示進製的變數up,初值為1;

((兩棧頂元素相加+up)%16)壓入result棧中,up=(兩棧頂元素相加+up)/16—>兩個加數棧分別pop()…… 直到其中一棧為空。

再迴圈,把上輪迴圈中未空的棧中的元素(注意up值)壓入result棧;

這樣得到的result棧就是運算結果了(棧頂為結果首位,棧底為結果末位)。輸出即可。

#include

using

namespace std;

intchar_to_int

(char c)

char

int_to_char

(int n)

intmain()

while

(!an.

empty()

)while

(!bn.

empty()

)printf

("case #%d:\n"

,cas);if

(up!=0)

printf

("1");

while

(!result.

empty()

)printf

("\n");

}return0;

}

這道題不難,但是我還是卡了兩下。

一是迴圈結束條件寫錯了(我真傻真的):

while((!an.empty())&&!(bn.empty()))寫成了while(!(an.empty()&&bn.empty()))

二是進製操作有點問題:

應該是把(x+y+up)%16壓棧,up=(x+y+up)/16。我一開始是判斷(x+y+up)是不是》=16,是的話就把(x+y+up-16)壓棧,up=1;

雖然寫完部落格還是沒看出有什麼問題……但是肯定是有問題的——要不然為什麼wa……

害,等我知道了再回來填坑吧hhh

EOJ 3037 十六進製制加法

請編寫程式實現兩個十六進製制整數的加法。例如 十六進製制整數 3762 和 05c3,3762 05c3 3d25 十六進製制整數 cb9 和 957,cb9 957 1610 第 1 行 乙個整數 t 1 t 10 為問題數。接下來 t 行,每行輸入兩個十六進製制整數 n 和 m n,m 為不超過...

三十六進製制加法

暴力轉換,就是把兩個36進製的數轉換成10進製,如何用10進製進行加減,最後再轉化成36進製,這種比較簡單就不再展示 重點講解第二種直接用36進製進行相加。看 有注釋 public class jinzhizhuanhuan aslist的返回物件是乙個arrays內部類,並沒有實現集合的修改方法,...

十六進製製大整數加法

十六進製製大整數加法 20分 問題描述 編寫程式,從鍵盤讀入形如x y 的表示式計算結果,其中x和y都是合法且長度不超過64位的十六進製製非負整數,結果中所有字元均大寫且無多餘的零。樣例1 輸入1234 1234輸出0x2468 樣例2 輸入0000 12a 輸出0x12a 樣例3 輸入12ff 1...