三、請使用 C, C++, Java 或 Python 程式語言撰寫採用五位數整數來進行資料
加密的完整程式。
1.撰寫加密函數 encrypt(),此函數可將所傳入的五位數整數進行加密,
並將加密後的密碼傳回。加密的規則如下:
先將該五位數整數的每位數值分別以「加 5 後除以 10 之餘數」取代。
再將取代後之數字的第一位數與第五位數互換,第二位數與第四位數互換,第三位數不變後取得一個新整數,此即為加密後的密碼。 (註:第一位數為萬分位、第二位數為千分位,以此類推。)
2.撰寫解密函數 decipher(),此函數可將所傳入的五位數密碼進行解密,並將解密後的整數傳回。解密的規則是將上述加密後之密碼還原為原傳入的整數。
3.撰寫主程式來驗證上述之加密與解密函數的正確性。程式一開始先讓使用者輸入任一之五位數整數[不在合理範圍內(10000~99999)須請使用者重新輸入],在呼叫加密函數後將所傳回之密碼從螢幕上顯示
出;再將該密碼傳入解密函數,再將所傳回之整數從螢幕上顯示出。程式須可讓使用者持續輸入五位數之整數,直到使用者輸入 0(整數)時結束程式的執行。
以下為程式執行的範例: (備註:斜體加外框線之整數為使用者所輸入,其餘皆為程式執行的輸出。)
請輸入一個五位數的整數(輸入 0 結束程式):1234
所輸入的數值並不是五位數之整數
請重新輸入:12345
加密後的密碼為:09876
解密後的密碼為:12345
請輸入一個五位數的整數(輸入 0 結束程式):67890
加密後的密碼為:54321
解密後的密碼為:67890
請輸入一個五位數的整數(輸入 0 結束程式):0
感謝使用此程式,歡迎您對此程式的優化提出建議。
詳解 (共 2 筆)
詳解
看了其他題目並無限制資料型態,提供一種使用string的方法供大家參考,有錯誤請指教:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string encrypt(string num){
string temp="";
for(char c:num){
int tempnum=c-'0';
tempnum=(tempnum+5)%10;
temp+='0'+tempnum;
}
return string(temp.rbegin(),temp.rend());
}
string decipher(string num){
string temp=string(num.rbegin(),num.rend());
string result="";
for(char c:temp){
result+='0'+abs((c-'5'));
}
return result;
}
int main(){
string num;
cout<<"請輸入一個五位數的整數(輸入 0 結束程式):";
while(getline(cin,num)){
if(num=="0") break;
if(num.length()!=5 || !all_of(num.begin(),num.end(),::isdigit)){ //因為輸入string所以需要檢查是不是全為整數
cout<<"所輸入的數值並不是五位數之整數"<<endl;
}else {
string enc=encrypt(num);
string dec=decipher(enc);
cout<<"加密後的密碼為:"<<enc<<endl;
cout<<"解密後的密碼為:"<<dec<<endl;
}
cout<<"請輸入一個五位數的整數(輸入 0 結束程式):";
}
return 0;
}
以下是輸出結果:

然後我請谷哥小姐模擬自己是leetcode幫我試了一堆結果顯示通過


就參考看看這樣: )
詳解
def encrypt(n):
# 將數字轉換為五位數字串
s = str(n)
# 將每個數字加5後除以10取餘數
encrypted = ''.join(str((int(char) + 5) % 10) for char in s)
# 進行位置互換
encrypted = encrypted[4] + encrypted[3] + encrypted[2] + encrypted[1] + encrypted[0]
return int(encrypted)
# 將數字轉換為五位數字串
s = str(n)
# 將每個數字加5後除以10取餘數
encrypted = ''.join(str((int(char) + 5) % 10) for char in s)
# 進行位置互換
encrypted = encrypted[4] + encrypted[3] + encrypted[2] + encrypted[1] + encrypted[0]
return int(encrypted)
def decipher(n):
s = str(n)
# 進行位置互換
decrypted = s[4] + s[3] + s[2] + s[1] + s[0]
# 將每個數字減5並處理負數情況
decrypted = ''.join(str((int(char) - 5) % 10) for char in decrypted)
return int(decrypted)
s = str(n)
# 進行位置互換
decrypted = s[4] + s[3] + s[2] + s[1] + s[0]
# 將每個數字減5並處理負數情況
decrypted = ''.join(str((int(char) - 5) % 10) for char in decrypted)
return int(decrypted)
if __name__ == '__main__':
while True:
user_input = input("請輸入一個五位數的整數(輸入 0 結束程式):")
if user_input.isdigit():
num = int(user_input)
if num == 0:
print("感謝使用此程式,歡迎您對此程式的優化提出建議。")
break
elif 10000 <= num <= 99999:
encrypted = encrypt(num)
print(f"加密後的密碼為:{encrypted}")
decrypted = decipher(encrypted)
print(f"解密後的密碼為:{decrypted}")
else:
print("所輸入的數值並不是五位數之整數")
else:
print("請輸入有效的數字")
這段程式先定義了加密(encrypt)和解密(decipher)函數,然後透過一個無窮迴圈來讓使用者反覆輸入數字直到輸入0為止。如果輸入的數字不是五位數,程式會提示重新輸入。這樣的設計滿足了題目的要求,並提供了一個基本的用戶互動界面。
while True:
user_input = input("請輸入一個五位數的整數(輸入 0 結束程式):")
if user_input.isdigit():
num = int(user_input)
if num == 0:
print("感謝使用此程式,歡迎您對此程式的優化提出建議。")
break
elif 10000 <= num <= 99999:
encrypted = encrypt(num)
print(f"加密後的密碼為:{encrypted}")
decrypted = decipher(encrypted)
print(f"解密後的密碼為:{decrypted}")
else:
print("所輸入的數值並不是五位數之整數")
else:
print("請輸入有效的數字")
這段程式先定義了加密(encrypt)和解密(decipher)函數,然後透過一個無窮迴圈來讓使用者反覆輸入數字直到輸入0為止。如果輸入的數字不是五位數,程式會提示重新輸入。這樣的設計滿足了題目的要求,並提供了一個基本的用戶互動界面。