首页 > 其他分享 >PAT Basic 1048. 数字加密

PAT Basic 1048. 数字加密

时间:2023-03-23 10:44:58浏览次数:51  
标签:Basic PAT res sum 1048 ori char oriLen 加密

PAT Basic 1048. 数字加密

1. 题目描述:

本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。

2. 输入格式:

输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。

3. 输出格式:

在一行中输出加密后的结果。

4. 输入样例:

1234567 368782971

5. 输出样例:

3695Q8118

6. 性能要求:

Code Size Limit
16 KB
Time Limit
400 ms
Memory Limit
64 MB

思路:

除草题,考察基础IO,但是第一次提交testpoint2,5报wrong answer,检查了逻辑感觉没问题。。。最后还是参考了大佬的题解:PAT-Basic-1048. 数字加密 – Lnyan's Blog (llonely.com)

这里有个bug点就是当正整数B的长度小于密钥A时,是需要在B前面补0的,也就是说A的每一位都必须被用到。一开始我写的是直接忽略A多余的位,也算题目描述不清晰吧。。。

另外一个细节是最后不需要res[oriLen] = '\0';也可以正常输出,应该是char res[101] = "";初始化时已经将所有的字节置0了。

My Code:

#include <stdio.h>
#include <string.h> // strlen header

// first submit testpoint2, 5 wrong answer.
int main(void)
{
    char elem[3] = {'J', 'Q', 'K'};
    char key[101] = "";
    char ori[101] = "";
    char res[101] = "";
    char temp[101] = "";
    int flag = 0; // 0 means odd bit, 1 means even bit
    //char *pKey = NULL, *pOri = NULL, *pRes = NULL;
    int keyLen = 0, oriLen = 0;
    int i=0, j=0;
    int sum=0;
    
    scanf("%s%s", key, ori);
    keyLen = strlen(key);
    oriLen = strlen(ori);
    
//     if(oriLen == 0)
//     {
//         printf("\n");
//         return 0;
//     }
    
    // to pass testpoint2, 5
    if(oriLen < keyLen) // need add '0' at the header of ori[]
    {
        //void *memcpy(void *str1, const void *str2, size_t n)
        memcpy(temp, ori, oriLen);
        memcpy(ori+(keyLen-oriLen), temp, oriLen);
        for(i=0; i<keyLen-oriLen; ++i)
        {
            ori[i] = '0';
        }
        oriLen = keyLen;
    }
    
    for(i=keyLen-1, j=oriLen-1; i>=0 && j>=0; --i, --j)
    {
        if(flag) // even bit
        {
            flag = 0;
            sum = ((ori[j]-'0') - (key[i]-'0'));
            if(sum < 0) sum+=10;
            res[j] = sum+'0';
        }
        else // odd bit
        {
            flag = 1;
            sum = ((key[i]-'0') + (ori[j]-'0')) % 13;
            if(sum>9)
            {
                res[j] = elem[sum-10];
            }
            else
            {
                res[j] = sum+'0';
            }
        }
    }
    
    for( ; j>=0; --j) // oriLen > keyLen
    {
        res[j] = ori[j];
    }
    
    //res[oriLen] = '\0';
    
    printf("%s\n", res);
    
    
    return 0;
}

标签:Basic,PAT,res,sum,1048,ori,char,oriLen,加密
From: https://www.cnblogs.com/tacticKing/p/17246576.html

相关文章

  • PAT Basic 1046. 划拳
    PATBasic1046.划拳1.题目描述:划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字......
  • Servlet.service() for servlet [dispatcherServlet] in context with path [] threw
    报错如下:Servlet.service()forservlet[dispatcherServlet]incontextwithpath[]threwexception[Circularviewpath[jxsr2]:woulddispatchbacktothecurr......
  • 小菜学设计模式 工厂设计模式 Simple Factory Pattern
    设计模式的工厂设计模式。工厂模式有以下几种形态:简单工厂(SimpleFactory)模式工厂方法(FactoryMethod)模式抽象工厂(AbstractFactory)模式优点:工厂类含有必要的判断逻......
  • java代码中获取classpath路径
    javaweb工程中,有时候需要自己手动的去读取classpath下面的配置文件,这里总结一点读取classpath路径的方法,分享一下。方法一:Stringpath=Test.class.getResource("/").......
  • citus 11.2 更好的支持patroni 集群部署
    citus11.2可以更好的支持基于patroni的集群环境部署了,同时patroni官方也提供了相关的文档专门介绍如何进行citusha的部署我以前有简单说明过基于patroni+citus11......
  • selenium登录cnblogs-抽屉半自动点赞-xpath的使用-selenium动作链-自动登录12306-打码
    目录selenium登录cnblogs-抽屉半自动点赞-xpath的使用-selenium动作链-自动登录12306-打码平台使用-使用打码平台自动登录-使用selenium爬取jd商品信息-scrapy介绍昨日回顾......
  • PAT Basic 1043. 输出PATest
    PATBasic1043.输出PATest1.题目描述:给定一个长度不超过 \(10^4\) 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest.... 这样的顺序输出,并忽......
  • PAT Basic 1042. 字符统计
    PATBasic1042.字符统计1.题目描述:请编写程序,找出一段给定文字中出现最频繁的那个英文字母。2.输入格式:输入在一行中给出一个长度不超过1000的字符串。字符串由......
  • PAT Basic 1041. 考试座位号
    PATBasic1041.考试座位号1.题目描述:每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座......
  • 爬虫:selenium 登录cnblogs、抽屉半自动点赞、xpath的使用、selenium 动作链、自动登录
    目录一、selenium登录cnblogs二、抽屉半自动点赞三、xpath的使用四、selenium动作链4.1动作链案例五、自动登录12306六、打码平台使用七、使用打码平台自动登录八、使用......