PAT乙級 數字加密

2021-09-02 16:44:27 字數 1659 閱讀 6394

本題要求實現一種數字加密方法。首先固定乙個加密用正整數 a,對任一正整數 b,將其每 1 位數字與 a 的對應位置上的數字進行以下運算:對奇數字,對應位的數字相加後對 13 取餘——這裡用 j 代表 10、q 代表 11、k 代表 12;對偶數字,用 b 的數字減去 a 的數字,若結果為負數,則再加 10。這裡令個位為第 1 位。

輸入在一行中依次給出 a 和 b,均為不超過 100 位的正整數,其間以空格分隔。

在一行中輸出加密後的結果。

1234567 368782971
3695q8118
看完題目之後我的第一想法並不是像大多數人一樣利用字串的reverse來進行反轉再求解,我首先想到的是利用堆疊後進先出的特點。就在我提交**之後,滿懷期待的等著全部ac的時候,有倆個測試用例顯示了段錯誤。這就很難受啊,本菜雞怎麼修改都還是顯示段錯誤,在我這個菜雞各種求助之後,某大佬發現題目中並沒有表明字串b一定大於字串a。然後感謝我的某位巨佬同學把這個bug修復了。她舉了個例子,當輸入"12 1",即a=12 b=1時,我的**輸出結果是3,而根據題意可知正確答案應該是93。具體的修改方法是:如果字串a的長度大於字串b的長度,則在字串b的前面補0,一開始就把b.length()-a.length()個0推入b棧來完成補0操作。其他地方完全不用改變。哈哈哈哈哈 提交之後發現6個測試用例全部ac。

#include using namespace std;

int main()

for (int i = 0; i < b.length(); i++)

int count = 1; //位數

stackresult;

while(!a.empty())

result.push(to_string(temp)); //壓入棧中

}else //對於奇數字

}count++;

a.pop(); //刪除a的棧頂元素

b.pop(); //刪除b的棧頂元素

}while(!b.empty()) //若b中還有多餘的元素

while(!result.empty())

return 0;

}

#include using namespace std;

int main()

}for (int i = 0; i < lena; i++)

for (int i = 0; i < lenb; i++)

int count = 1; //位數

stackresult; //加密後的結果

while(!a.empty()) //無論a長還是b長,加密的位數按照a的長度來

result.push(to_string(temp)); //壓入棧中

}else //對於奇數字

}count++;

a.pop(); //刪除a的棧頂元素

b.pop(); //刪除b的棧頂元素

}while(!b.empty()) //若b中還有多餘的元素,則把它們全部推入棧中

while(!result.empty()) //清倉大甩賣

return 0;

}

PAT乙級 數字黑洞

給定任乙個各位數字不完全相同的 4 位正整數,如果我們先把 4 個數字按非遞增排序,再按非遞減排序,然後用第 1 個數字減第 2 個數字,將得到乙個新的數字。一直重複這樣做,我們很快會停在有 數字黑洞 之稱的6174,這個神奇的數字也叫 kaprekar 常數。例如,我們從6767開始,將得到 77...

PAT乙級 數字分類 20

這道題其實就是乙個簡單的邏輯題,由於沒有編譯環境,純txt程式設計就會出各種小問題,錯了幾次。以後應該多用用。這道題中有乙個部分需要控制一下精度,順便學習了一下cout怎麼控制精度輸出。include iostream include stdio.h include string.h include...

PAT乙級數字黑洞 20

題目描述 給定任乙個各位數字不完全相同的4位正整數,如果我們先把4個數字按非遞增排序,再按非遞減排序,然後用第1個數字減第2個數字,將得到 乙個新的數字。一直重複這樣做,我們很快會停在有 數字黑洞 之稱的6174,這個神奇的數字也叫kaprekar常數。例如,我們從6767開始,將得到 7766 6...