package com.se;
import java.util.ArrayList;
import java.util.List;
/**
* 1:(Java基础知识的考察) 某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密,加密规则如下:
* 首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,最后将第一位和最后一位数字交换。
* 请任意给定一个小于8位的整数,然后,把加密后的结果在控制台打印出来。
*
* @author 80514938 2013-10-22
*/
public class Demo_1 {
// 获取对应长度的最小值,如长度为5,最小值则为10000
public static int getMinByLength(int length) {
int min = 1;
for (int j = length - 1; j > 0; j--) {
min = 10 * min;
}
return min;
}
// 把号码的每个数字存进list中
public static List<Integer> getNumList(int num) {
List<Integer> nl = new ArrayList<Integer>();
int length = (num + "").length();
int len = length;
for (int i = 0; i < length; i++) {
int minNum = getMinByLength(len);
nl.add(num / minNum);
len--;
num = num % minNum;
}
return nl;
}
// 倒序输出数字
public static int getDescNum(int num) {
int length = (num + "").length();
int len = length;
int result = 0;
List<Integer> numList = getNumList(num);
for (int i = length - 1; i >= 0; i--) {
int minNum = getMinByLength(len);
result = result + numList.get(i) * minNum;
len--;
}
return result;
}
// 倒序
public static int desc(int num) {
int length = (num + "").length();
int len = length;
int result = 0;
for (int i = 0; i < length; i++) {
int minNum = getMinByLength(len);
int min = getMinByLength(i + 1);
result = result + (num / minNum) * min;
len--;
num = num % minNum;
}
return result;
}
// 调换第一位与最后一位
public static int siteReplace(int num) {
int length = (num + "").length();
int len = length;
int result = 0;
List<Integer> numList = getNumList(num);
for (int i = 0; i < length; i++) {
int minNum = getMinByLength(len);
if (i == 0) {
result = result + numList.get(length - 1) * minNum;
} else if (i == length - 1) {
result = result + numList.get(0) * minNum;
} else {
result = result + numList.get(i) * minNum;
}
len--;
}
return result;
}
// 每位数字都加上5,再用和除以10的余数代替该数字
public static int getReplaceNum(int num) {
int length = (num + "").length();
int len = length;
int result = 0;
for (int i = 0; i < length; i++) {
int minNum = getMinByLength(len);
int sum = num / minNum + 5;
result = result + (sum % 10) * minNum;
len--;
num = num % minNum;
}
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
int phone = 1002;
int desc = desc(phone);
System.out.println("倒序1:" + desc);
// 倒序
int descPhone = getDescNum(phone);
System.out.println("倒序2:" + descPhone);
// 每位数字都加上5,再用和除以10的余数代替该数字
int result = getReplaceNum(descPhone);
System.out.println(result);
// 第一个与最后一个替换
result = siteReplace(result);
System.out.println("result=" + result);
}
}
获取号码的倒序写了两个方法,一个取巧的用了List,一个完全是比较复杂的逻辑判断了。
若有错误,欢迎指出;若有更好的实现方式,还请告知,谢谢。