1048 数字加密 (20分)
本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。
输入格式:
输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。
输出格式:
在一行中输出加密后的结果。
输入样例:
1234567 368782971
输出样例:
3695Q8118
要注意的地方:
输入以最大位数为主
例如:12345 1 看作是12345 00001
123 12345看作是 00123 12345
首次通过代码:
1 #include<stdio.h> 2 #include<string.h> 3 4 int main(){ 5 char key[101]; 6 char user_input[101]; 7 char final_input[101]; 8 scanf("%s %s",key,user_input); 9 int key_len=strlen(key)-1; 10 int user_input_len=strlen(user_input)-1; 11 int max; 12 if(key_len>user_input_len) max=key_len; 13 else max=user_input_len; 14 int flag=1;int flag1=1; 15 final_input[max+1]='\0'; 16 while(1){ 17 if(user_input_len<0) { 18 if(flag1){ 19 for(int i=0;i<=key_len;i++){ 20 user_input[i]='0'; 21 } 22 flag1=0; 23 user_input_len=key_len; 24 continue; 25 } 26 break; 27 } 28 else if(key_len<0){ 29 for(int i=user_input_len;i>=0;i--){ 30 final_input[max--]=user_input[i]; 31 } 32 break; 33 } 34 if(flag){ 35 flag=0; 36 int x=(key[key_len]+user_input[user_input_len]-'0'-'0')%13; 37 if(x>=0&&x<=9) final_input[max--]=x+'0'; 38 else { 39 switch(x){ 40 case 10:final_input[max--]='J';break; 41 case 11:final_input[max--]='Q';break; 42 case 12:final_input[max--]='K';break; 43 } 44 } 45 46 } 47 else { 48 flag=1; 49 int x=user_input[user_input_len]-key[key_len]; 50 if(x<0) x+=10; 51 final_input[max--]=x+'0'; 52 53 } 54 user_input_len--; 55 key_len--; 56 } 57 58 printf("%s",final_input); 59 return 0; 60 61 }