题目大概意思: 任意一个4位整数,对每一位数加7,然后用得到的新值对10求模.然后对求模得到的数值按照第一位与第三位、第二位与第四位交换位置的方式排列.再重新编一个解密方法,将加密的4位数解密成原来的数.
  
  我不明白将加密的4位数解密成原来的数怎么实现, 如 10 % 10 == 0 , 0 % 10 == 0 ,两个都是0  , 该怎么解密还原为10 , 0 呢? 还是我理解错题目的意思?  有劳各位指教,谢谢!

解决方案 »

  1.   

    不知道我没有理解对楼主题目的意思,代码没有检测错误,也没有经过优化,楼主将就看看吧。
    public class test
    {
    //测试函数
    public static void main(String[] args)
    {
    int[] array = {1234, 1000, 3021, 5412, 9999, 1254, 6555, 2345};
    for ( int i = 0; i < array.length; i++ )
    {
    System.out.println("待加密数字: " + array[i] + " 加密后的数字: " + encrypt(array[i]) + " 解密后的数字: " + rip(encrypt(array[i])));
    }
    }

    //加密函数
    public static String encrypt(int oldNumber)
    {
    char[] array = new char[4];
    array = (String.valueOf(oldNumber)).toCharArray();
    for ( int i = 0; i < array.length/2; i++ )
    {
    char temp = array[i];
    array[i] = array[i+2];
    array[i+2] = temp;
    }

    StringBuffer newNumber = new StringBuffer();
    for ( int i = 0; i < array.length; i++ )
    {
    newNumber.append(((Character.digit(array[i],10)+7)%10));
    }

    return newNumber.toString();
    }

    //解密函数
    public static String rip(String cryptogram)
    {
    char[] array = new char[4];
    array = cryptogram.toCharArray();
    for ( int i = 0; i < array.length/2; i++ )
    {
    char temp = array[i];
    array[i] = array[i+2];
    array[i+2] = temp;
    }

    StringBuffer oldNumber = new StringBuffer();
    for ( int i = 0; i < array.length; i++ )
    {
    oldNumber.append(getOldNumber(array[i]));
    }

    return oldNumber.toString();
    }

    //钥匙,解密的关键所在,楼主只需把这儿弄懂就行了
    private static int getOldNumber(char ch)
    {
    int temp = Character.digit(ch,10);
    if ( temp <= 6 )
    {
    return (temp+10)-7;
    }
    else
    {
    return temp-7;
    }
    }
    }
      

  2.   

    感谢 happydivid(泓笑) 大哥~  我现在看看