思路:用字符串数组存储。首先要反转一下字符串,因为是从个位开始计算的。然后i下标从0开始,所以奇偶也要反一下。其次,考虑到,A,B位数可能会不一样,不用单独拿出来讨论,直接在大循环中进行就行,不足的位补0即可。
注意:取字符串中的数,要减去‘0’。整数存进字符串中,要加上‘0’。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
void reverse(char s[]){ //将字符串反转
int len = strlen(s);
for(int i = 0;i < len/2;++ i){ //只需到len/2
int tmp = s[i];
s[i] = s[len-i-1];
s[len-i-1] = tmp;
}
}
int main(){
char str1[110],str2[110],str3[110];
scanf("%s %s",str1,str2);
int n1 = strlen(str1);
int n2 = strlen(str2);
int mmax = max(n1,n2);
int mmin = min(n1,n2);
reverse(str1);
reverse(str2);
for(int i = 0;i < mmax;++ i){ //取较长的位数
int numA = i < n1 ? str1[i] - '0' : 0; //用?:取值
int numB = i < n2 ? str2[i] - '0' : 0;
if(i%2 == 1){ //个位为第一位,从0开始,所以奇偶要反一下
if(numB - numA < 0){
str3[i] = numB - numA + 10 + '0';
}
else str3[i] = numB - numA + '0';
}
else{
int tmp = (numB + numA )%13;
if(tmp == 10) str3[i] = 'J';
else if(tmp == 11) str3[i] = 'Q';
else if(tmp == 12) str3[i] = 'K';
else str3[i] = tmp + '0';
}
}
/*
//尝试单独输出前面多余的项,失败
for(int i = mmin-1;i < mmax;++ i){
if(mmax == n2){
//int num = str2[i] - '0';
//str3[i] = num + '0';
str3[i] = str2[i];
}
else{
//int num = str1[i] - '0';
//str3[i] = num + '0';
str3[i] = str1[i];
}
}
*/
/*
//尝试单独输出前面多余的项,失败
reverse(str1);
reverse(str2);
for(int i = 0;i < mmax-mmin; ++ i){
if(mmax == n2){
printf("%c",str2[i]);
}
else printf("%c",str1[i]);
}
*/
reverse(str3);
printf("%s",str3);
return 0;
}
版权声明:本文为博主原创文章,如有错误,恳请大家在评论区指出,在下不胜感激~如要转载注明出处即可~