這題相對比較簡單,就是逐個讀入數字然後加起來,算出來的總和從最高位開始逐位用英文輸出。需要注意的是,題中所給的數字是連在一起的,沒有用空格隔開,而如果直接用cin會把一整串數字都讀進去,這不是我們想要的。逐個字元讀入需要用到的是cin.get()
方法。不過這樣讀進來的是char型別,如果用int輸出相當於輸出各個數字對應的ascii碼。我們需要將它轉換成int型別,如果記得住數字對應的ascii值比數字多48,就可以直接減48,如果記不住也可以用num = c - '0'
來轉換,其中num是int型別,c是char型別。關於什麼時候停止讀取,網上給的是cin.get()) != eof
,不過我試了一下,發現pat的輸入最後還有一位換行符,如果只有eof來判斷,那麼最後還會讀入換行符對應的ascii值10。因此我們需要再加乙個判斷即(c = cin.get()) != eof && c!=10
。
讀入的同時進行累加運算,讀完所有數字後就已經得到了它們的總和。題目中要求從最高位開始逐位用英文輸出。先解決英文輸出的問題,這個簡單,寫乙個方法專門進行轉換即可。如何從最高位開始輸出,我目前沒有想到直接從最高位開始輸出的方法,但我知道怎麼從最低位開始輸出,只要每次取模10後的結果並且再將總和自身除以10即可。我可以把從最低位開始的每位數字存在vector中,之後倒序輸出即可。**如下:
#include #include #include using namespace std;
string transfer(int digit);
int main()
if (sum == 0) //考慮總和為0的情況,此時直接輸出zero
while (sum != 0)
for (int i = result.size() - 1; i >= 0; i--) //倒序輸出vector
return 0;
}string transfer(int digit) //阿拉伯數字和英文轉換器
return "nan"; //用不到,但函式必須得有返回值
}
一開始我沒有考慮總和一開始就為0的情況,所以有乙個測試點過不去。之後加上了一條專門判斷總和是否為0的語句。 PAT甲級刷題實錄 1014
這題需要用到佇列,而且不止一條。首先是每個等待視窗各需要一條,另外在黃線外的等待顧客需要一條。c 提供了現成了現成的佇列型別,只要引用標頭檔案queue即可。演算法基本執行過程是 在輸入顧客等待時間時依次填滿每條佇列,超出佇列容量的,即編號大於n m 1的顧客,則push進黃線外的等待佇列中。當有視...
PAT甲級刷題實錄 1008
這題應該是到目前為止最簡單的一道題,評測系統的通過率統計也達到了驚人的0.59。我們需要定義以下用於計算的變數 currentfloor 當前所在的樓層,初始值為0 nextfloor 接下來要前往的樓層,數值通過讀取輸入來確定 totaltime 經過的總時間。因為這題思路實在太簡單了,我也不用自...
PAT甲級刷題
給定兩個字串s1和s2,刪除s1中在s2 現過的字元設定flag陣列,初始化為0。遍歷s2並將其字元轉化為ascii碼值,並在flag陣列中相應位置值標記為1,表示它出現過。再遍歷s1,若對應字元ascii碼值在flag陣列中相應位置值標記為0,則輸出。就是hash的思想,時間複雜度o len s1...