• PAT 1048. 数字加密(20)


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

    输入格式:

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

    输出格式:

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

    输入样例:

    1234567 368782971
    

    输出样例:

    3695Q8118
    代码写的又多又冗余,需注意的是,当B的长度小于A的长度时B需要前端补零,以及最后一个测试点当B长度小于A长度时,A元素为零需要做特殊处理。
     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 #include<ctype.h>
     5 #include<math.h>
     6 int main(){
     7     char a[110];
     8     char b[110];
     9     scanf("%s",a);
    10     getchar();
    11     scanf("%s",b);
    12     char c[110];
    13     int lena = strlen(a);
    14     int lenb  = strlen(b);
    15     int j;
    16     int temp;
    17     if(lenb-lena>=0){
    18             for(int i=0;i<lenb-lena;i++){
    19                 printf("%c",b[i]);
    20         }
    21         j = 0;
    22         temp = lena;
    23         for(int i=lenb-lena;i<lenb;i++){
    24             if((temp--)%2==0){
    25                 b[i] = b[i]-a[j];
    26                 if(b[i]<0){
    27                     b[i] = b[i]+10;
    28                 }
    29                 b[i] = b[i]+'0';
    30             }
    31             else{
    32                 if((b[i]-'0'+a[j]-'0')%13>=10){
    33                     if((b[i]-'0'+a[j]-'0')%13==10)
    34                         b[i] = 'J';
    35                     else if((b[i]-'0'+a[j]-'0')%13==11){
    36                         b[i] = 'Q';
    37                     }
    38                     else if((b[i]-'0'+a[j]-'0')%13==12){
    39                         b[i] = 'K';
    40                     }
    41                 }
    42                 else{
    43                     b[i] = (b[i]-'0'+a[j]-'0')%13+'0';
    44                 }
    45                 
    46             }
    47             j++;
    48             printf("%c",b[i]);
    49         }
    50     } 
    51     else{
    52         temp = lena;
    53         for(int i=0;i<lena-lenb;i++){
    54             if((temp--)%2==0){
    55                 if(a[i]!='0')
    56                     printf("%c",'9'+1-a[i]+'0');
    57                 else
    58                     printf("0");
    59             }
    60             else{
    61                 printf("%c",a[i]);
    62             }
    63         }
    64         j = lena-lenb;
    65         temp = lenb;
    66         for(int i=0;i<lenb;i++){
    67             if((temp--)%2==0){
    68                 b[i] = b[i]-a[j];
    69                 if(b[i]<0){
    70                     b[i] = b[i]+10;
    71                 }
    72                 b[i] = b[i]+'0';
    73             }
    74             else{
    75                 if((b[i]-'0'+a[j]-'0')%13>=10){
    76                     if((b[i]-'0'+a[j]-'0')%13==10)
    77                         b[i] = 'J';
    78                     else if((b[i]-'0'+a[j]-'0')%13==11){
    79                         b[i] = 'Q';
    80                     }
    81                     else if((b[i]-'0'+a[j]-'0')%13==12){
    82                         b[i] = 'K';
    83                     }
    84                 }
    85                 else{
    86                     b[i] = (b[i]-'0'+a[j]-'0')%13+'0';
    87                 }
    88                 
    89             }
    90             j++;
    91             printf("%c",b[i]);
    92         }
    93     }
    94     
    95 } 
  • 相关阅读:
    Java学习资源整理(超级全面)
    Java中的Iterable与Iterator详解
    git使用笔记1:结合Github远程仓库管理项目
    关于LeetCode上链表题目的一些trick
    关于链表中哨兵结点问题的深入剖析
    关于Java中基类构造器的调用问题
    大整数相乘问题总结以及Java实现
    快速排序实现及其pivot的选取
    阿里云服务器部署Java Web项目全过程
    Git 学习总结
  • 原文地址:https://www.cnblogs.com/lolybj/p/6240308.html
Copyright © 2020-2023  润新知