PTA刷題小結(basic篇)

2021-10-02 22:35:03 字數 1656 閱讀 1814

basic 1002

題目:讀入乙個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。

輸入格式:

每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裡保證 n 小於 10的100次方

輸出格式:

在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後乙個拼音數字後沒有空格。

知識點:

1.超大整數運算 將整數先讀成str然後操作後再轉回來。(此題其實不用,因為不涉及超大整數的加減乘除)

for

(auto ch : num)

//ch依次取的是str裡面的字元,直到取完為止 c++11,新式for迴圈

for(i =

0; i < num.

size()

;++i)

sum +

= big_num[i]

;

2.關於逆向迭代器

乙個容器的範圍用普通迭代器表示為乙個「半開半閉」的區間。頭部為begin,指向容器第乙個元素的位置。末尾為end,指向最後乙個元素的下乙個位置,每個容器都提供了這樣乙個位置,儘管該位置不可引用,但卻是個合法的位址。相反,第乙個元素位置的前乙個位置容器卻沒有任何保證,比如對於vector和string來說,就是非法的位置。這裡我們說「合法」與「非法」,簡單來講,可以這樣認為,乙個合法的位置對於迭代器來說是可以達到的,像最後乙個元素的下乙個位置end()。而對於首元素的前乙個位置,迭代器是無法指向它的,begin()-1這個表示式會導致異常。因此,反向迭代器與普通迭代器在物理位置上保持了一一對應,即rbegin()對應普通迭代器的end()位置,rend()對應其begin()位置。

但是,為了讓反向迭代器與普通迭代器在概念上保持一致性,即begin()(反向迭代器對應為rbegin())對應第乙個元素(對於反向迭代器來說,最後乙個元素即第乙個元素),end()(反向迭代器對應為rend())對應最後乙個元素的下乙個位置,於是標準庫的設計者們想出這樣乙個方法,即反向迭代器的邏輯位置等於其物理位置的前乙個位置。換句話說,物理位置對應迭代器在記憶體中的實際位置,邏輯位置對應迭代器對應容器中元素的位置。這樣,對於rbegin()來說,它物理位置是容器最後乙個元素的下乙個位置,邏輯位置即容器最後乙個元素的位置(對反向迭代器來說就是第乙個元素元素的位置),同理rend()物理位置為容器第乙個元素位置,邏輯位置即第乙個位置的前乙個位置(依然不可解引用)。這樣,反向迭代器與普通迭代器便有了一致的概念,即「半開半閉」區間。更為直觀的演示如下圖

注意逆向迭代器的遞增是向著物理位置的「前方」的,即位址前大後小。用rit++來逆向迭代。

basic 1004

注意事項:

1.在vs上,scanf瘋狂報錯,情況未知。多用輸入輸出流替代。

2.結構體struct在c++中與class並無分別,前者的函式預設是public,後者的函式預設是private。

3.形如char[15]的字串是常量,是不可直接複製修改的左值,如果要修改要用strcpy函式修改。

struct student

;

PTA刷題技巧

作用 刷題的時有時輸入的資料量太大,格式太繁瑣,每次除錯都得自己輸入資料,除錯的20 以上的時間都放在輸入資料上面了,考試黑框框不能複製。include include include include include include include include includeusing name...

PTA刷題日誌 2020 1 27

第一題 1096 consecutive factors 20分 類似於數學問題,求最大長度子列乘積,所有子列必須滿足都小於等於sqrt n 因為sqrt n sqrt n n,所以只需要從2遍歷到sqrt n 然後逐項相乘,如果成績不能被n整除就放棄迴圈,重新開始。第二題 1059 prime f...

刷題 PTA 完全數

pta 7 45 找完數 雲上明月 的程式 1 include2 int isperfect int num 34 intmain 19 20 21 22if exist printf none 23return0 24 2526 int isperfect int num 33 34if fact...