PATB1048:数字加密
【思路】: 输入 循环 判断,只需要对每个元进行一次操作即可
【知识点】
杂类用hash表示
char has_z[3] = { 'J', 'Q', 'K' };
【知识点】
对于c的字符数组可以用reverse来进行字符数组的反转,本题由于是字符到bit的操作,所以字符反转是常规思路
reverse(a, a + strlen(a));
reverse(b, b + strlen(b));
【知识点】
一个分支,只有一个操作而不是附加操作的话 需要用 if else 而非if(附加操作)
if (num <=12 && num >=10)
{
ans[k++] = has_z[num - 10]; //一定是 if else
}
else {
ans[k++] = '0' + num;
}
【知识点】
对于没法不全的补充,字符补充,分支判断
if (i <strlen(a))
{
bit1 = a[i] - '0';
}
else{
bit1 = 0;
}
【参考代码】
//数字加密
void B1048(){
char has_z[3] = { 'J', 'Q', 'K' };
char a[110] , b[110];
cin >> a >> b;
reverse(a, a + strlen(a));
reverse(b, b + strlen(b));
int size = max(strlen(a), strlen(b));
char ans[110] = {'\0'}; int k = 0;
for (int i = 0; i < size; i++)
{
int bit1;
int bit2 ;
if (i <strlen(a))
{
bit1 = a[i] - '0';
}
else{
bit1 = 0;
}
if (i <strlen(b))
{
bit2 = b[i] - '0';
}
else{
bit2 = 0;
}
//得到数字
if (i % 2 == 0)//奇数
{
int num = (bit1 + bit2) % 13;
if (num <=12 && num >=10)
{
ans[k++] = has_z[num - 10]; //一定是 if else
}
else {
ans[k++] = '0' + num;
}
}
else{
int num2 = bit2 - bit1;
if (num2 < 0)
{
num2 += 10;
}
ans[k++] = '0' + num2;
}
}
reverse(ans, ans + strlen(ans));
puts(ans);
}