PAT-BASIC1048——數字加密
阿新 • • 發佈:2018-12-17
題目描述:
知識點:字串
思路:根據題述規則加密即可
本題有一個坑點:
當B字串的長度小於A字串的長度時,加密時需要在B字串前面補0直至和A字串的長度相等。否則無法通過測試點2和測試點5。
當然我的做法不是在B字元前面補0,而是用0代替B中的字元去計算索引大於B字串長度而小於等於A字串長度那部分的加密數字。
時間複雜度是O(n),其中n為字串A和字串B中較大的長度值。空間複雜度也是O(n)。
C++程式碼:
#include<iostream> #include<string> using namespace std; int main(){ string a; string b; cin >> a >> b; int index = 1; string result = ""; while(true){ if(index > a.length() && index > b.length()){ break; }else if(index > a.length() && index <= b.length()){ result += b[b.length() - index]; index++; }else if(index <= a.length() && index > b.length()){ if(index % 2 == 1){ int sum = (a[a.length() - index] - '0') % 13; if(sum == 10){ result += 'J'; }else if(sum == 11){ result += 'Q'; }else if(sum == 12){ result += 'K'; }else{ result += (sum + '0'); } index++; }else if(index % 2 == 0){ int diff = -(a[a.length() - index] - '0'); if(diff < 0){ diff += 10; } result += (diff + '0'); index++; } }else if(index % 2 == 1){ int sum = ((a[a.length() - index] - '0') + (b[b.length() - index] - '0')) % 13; if(sum == 10){ result += 'J'; }else if(sum == 11){ result += 'Q'; }else if(sum == 12){ result += 'K'; }else{ result += (sum + '0'); } index++; }else if(index % 2 == 0){ int diff = (b[b.length() - index] - '0') - (a[a.length() - index] - '0'); if(diff < 0){ diff += 10; } result += (diff + '0'); index++; } } for(int i = result.length() - 1; i >= 0; i--){ cout << result[i]; } return 0; }
C++解題報告: