黑马javaSE内部编程题10道--第一道源码

来源:互联网 发布:win10没有网络协议 编辑:程序博客网 时间:2024/05/19 12:14
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,最小值则为10000public 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,一个完全是比较复杂的逻辑判断了。

若有错误,欢迎指出;若有更好的实现方式,还请告知,谢谢。



原创粉丝点击