1048 数字加密 (20分)java实现(统一格式处理)

当数据格式一致时,处理会更加方便。
分别处理长串和短串,不仅容易乱,而且还容易忽略细节。

import java.util.Scanner;

/**
 * 首先固定一个加密用正整数 A,对任一正整数 B,将其每 1位数字与 A 的对应位置上的数字进行以下运算:
 * 对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;
 * 对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。
 * 1234567 368782971
 * 3695Q8118
 * @author DELL
 *
 */
public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		String a=sc.next();
		String b=sc.next();
		sc.close();
		//预处理,自动补0
		if(a.length()>b.length()) {
			b=addZero(b,a.length()-b.length());
		}else if(a.length()<b.length()) {
			a=addZero(a,b.length()-a.length());
		}
		//System.out.println(a);//查看是否自动补齐
		//System.out.println(b);
		
		boolean flag=true;//奇数标识
		if(a.length()%2==0) {
			flag=false;
		}
		for(int i=0;i<a.length();i++) {
			int aa=a.charAt(i)-'0';
			int bb=b.charAt(i)-'0';
			if(flag) {
				System.out.print(dealji(aa,bb));
			}else {
				System.out.print(dealou(aa,bb));
			}
			flag=!flag;
		}
	}

   //对于偶数的处理
	private static int dealou(int aa, int bb) {
		int c=bb-aa;
		if(c<0) {
			c+=10;
		}
		return c;
	}
	
	//对于奇数的处理
	private static char dealji(int aa, int bb) {
		int c=(aa+bb)%13;
		if(c==10) {
			return 'J';
		}else if(c==11) {
			return 'Q';
		}else if(c==12) {
			return 'K';
		}else {
			return (char)(c+'0');
		}
	}
	//自动补齐函数
	private static String addZero(String a, int len) {
		for(int i=0;i<len;i++) {
			a="0"+a;
		}
		//System.out.println(a);
		return a;
	}
}


![在这里插入图片描述](https://img-blog.csdnimg.cn/20200224114134370.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FuemhpbGFueGlhbw==,size_16,color_FFFFFF,t_70)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值