题目链接:
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;
}