1048. 数字加密(20)

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

输入格式:

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

输出格式:

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

输入样例:

1234567 368782971

输出样例:

3695Q8118
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include<string.h>
 4 
 5 char a[101];
 6 char b[101];
 7 int main()
 8 {
 9     int i;
10     int lena,lenb,lenc;
11     int ji,sum;
12     scanf("%s%s",a,b);
13     lena = strlen(a);
14     lenb = strlen(b);
15     if( lena-lenb>0 ) //如果a比b长,在b前补'0'
16     {
17         lenc = lena-lenb;
18         for( i=lenb-1; i>=0; i--)
19             b[i+lenc] = b[i];
20         for( i=0; i<lenc; i++)
21             b[i] = '0';
22     }
23     else if( lenb-lena>0) //如果b比a长,在a前补'0'
24     {
25         lenc = lenb-lena;
26         for( i=lena-1; i>=0; i--)
27             a[i+lenc] = a[i];
28         for( i=0; i<lenc; i++)
29             a[i] = '0';
30     }
31     lena = strlen(a);
32     ji=1; //奇数标志,等于1表示奇数位
33     for( i=lena-1; i>=0; i--)
34     {
35         if( ji )
36         {
37             sum =  (( a[i]-'0')+( b[i]-'0'))%13;
38             if( sum==12 )
39                 b[i]='K';
40             else if(sum==11)
41                 b[i]='Q';
42             else if( sum==10)
43                 b[i]='J';
44             else b[i]= sum+'0';
45             ji = 0;
46         }
47         else
48         {
49             sum = b[i]- a[i];
50             if( sum<0) sum += 10;
51             b[i]= sum+'0';
52             ji = 1;
53         }
54     }
55     puts(b);
56     return 0;
57 }
在这个国度中,必须不停地奔跑,才能使你保持在原地。如果想要寻求突破,就要以两倍现在速度奔跑!
原文地址:https://www.cnblogs.com/yuxiaoba/p/8520515.html