天天看点

PAT Basic Level 1048 数字加密 (20 分)

题目链接:

https://pintia.cn/problem-sets/994805260223102976/problems/994805276438282240

AC代码:

#include<iostream>
#include <algorithm>
#include <cstdio>
using namespace std;

int main()
{
    string str1,str2,str;
    cin>>str1>>str2;
    //reverse方法:反转字符串
    //reverse()会将区间[beg,end)内的元素全部逆序;
    //调用algorithm库
    reverse(str1.begin(),str1.end());
    reverse(str2.begin(),str2.end());
    for(int i=0;i<str1.size()||i<str2.size();i++){
        int k1=0,k2=0;
        if(i<str1.size())
            k1=str1[i]-'0';
        if(i<str2.size())
            k2=str2[i]-'0';
        cout<<k1<<" "<<k2<<endl;
        if(i%2==0){//奇数位,一开始奇数位的取法不对,导致输出错误,
            int k_1=(k1+k2)%13;
            if(k_1==10){
                str.push_back('J');
            }
            else if(k_1==11){
                str.push_back('Q');
            }
            else if(k_1==12){
                str.push_back('K');
            }
            else{
                str.push_back(k_1+'0');
            }
        }
        else{
            int k_2=k2-k1;
            if(k_2<0){
                k_2+=10;
            }
            str.push_back(k_2+'0');
        }
    }
    reverse(str.begin(),str.end());
    cout<<str;
    return 0;
}
           

二刷:

#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;

int main(){
    string str1,str2,str="";
    cin>>str1>>str2;
    reverse(str1.begin(),str1.end());
    reverse(str2.begin(),str2.end());
    for(int i=0;i<str1.size()||i<str2.size();i++){
        int num1=0,num2=0;
        if(i<str1.size())
            num1=str1[i]-'0';
        if(i<str2.size())
            num2=str2[i]-'0';
        if((i+1)%2==0){//偶数位
            int num=num2-num1;
            if(num<0)
                num+=10;
            str+=(num+'0');
            }
        else{//奇数位
            int num=(num1+num2)%13;
            if(num>=0&&num<=9)
                str+=(num+'0');
            else if(num==10)
                str+='J';
            else if(num==11)
                str+='Q';
            else if(num==12)
                str+='K';
        }
    }
    reverse(str.begin(),str.end());
    cout<<str;
    return 0;
}