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...