写在前面
- 实现思路
- 字符数组封装字符串
- 数字反转后,遍历逐位累加转换;不足位数补0参与计算
- 结果反转,打印输出
- 题目较简单,15分钟a题
- 最近略疲劳(代码撸多伤身),时间维度把握可能偏差
测试用例
input:
1234567 368782971
output:
3695Q8118
ac代码
- 算法笔记(基础版)
#include <cstdio>
#include <cstring>
const int maxn = 110;
const char ch[13] = {}
char a[maxn],b[maxn],ans[maxn] = {0};
void reverse_udf(char s[])
{
int len = strlen(s);
for(int i=0; i<len/2; i++)
{
int tmp = s[i];
s[i] = s[len-1-i];
s[len-1-i] = tmp;;
}
}
int main()
{
scanf("%s %s", a, b);
reverse_udf(a);
reverse_udf(b);
int lenA = strlen(a);
int lenB = strlen(b);
int len = lenA > lenB ? lenA : lenB;
for(int i=0; i<len; i++)
{
int numA = i < lenA ? a[i]-'0' : 0;
int numB = i < lenB ? b[i]-'0' : 0;
if(i%2 == 0)
{
int tmp = (numA + numB)%13;
if(tmp==10) ans[i] = 'J';
else if(tmp==11) ans[i] = 'Q';
else if(tmp==12) ans[i] = 'K';
else ans[i] = tmp + '0';
}
else
{
int tmp = numB-numA;
if(tmp<0) tmp+=10;
ans[i] = tmp+'0';
}
}
reverse_udf(ans);
printf("%s", ans);
// puts(ans);
return 0;
}
- 优化后
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 110;
const char ch[13] = {'0','1','2','3','4','5','6','7','8','9','J','Q','K'};
char a[maxn],b[maxn],ans[maxn] = {0};
int main()
{
scanf("%s %s", a, b);
int lenA = strlen(a);
int lenB = strlen(b);
reverse(a,a+lenA);
reverse(b,b+lenB);
int len = max(lenA, lenB);
for(int i=0; i<len; i++)
{
int numA = i < lenA ? a[i]-'0' : 0;
int numB = i < lenB ? b[i]-'0' : 0;
if(i%2 == 0)
ans[i] = ch[(numA + numB)%13];
else
ans[i] = (numB-numA+10)%10+'0';
}
reverse(ans, ans+strlen(ans));
printf("%s", ans);
return 0;
}
学习代码
- 1048. 数字加密(20).cpp
- 知识点
- 字符串补零实现
- 字符数组初始化实现,不同之处
char str[14] = {"0123456789JQK"};
const char ch[13] = {'0','1','2','3','4','5','6','7','8','9','J','Q','K'};
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
string a, b, c;
cin >> a >> b;
int lena = a.length(), lenb = b.length();
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
if (lena > lenb)
b.append(lena - lenb, '0');
else
a.append(lenb - lena, '0');
char str[14] = {"0123456789JQK"};
for (int i = 0; i < a.length(); i++) {
if (i % 2 == 0) {
c += str[(a[i] - '0' + b[i] - '0') % 13];
} else {
int temp = b[i] - a[i];
if (temp < 0) temp = temp + 10;
c += str[temp];
}
}
for (int i = c.length() - 1; i >= 0; i--)
cout << c[i];
return 0;
}