0
点赞
收藏
分享

微信扫一扫

1048 数字加密(附详细注释,逻辑分析)


写在前面

  • 实现思路
  • 字符数组封装字符串
  • 数字反转后,遍历逐位累加转换;不足位数补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;
}


举报

相关推荐

0 条评论