题目大意是要加密一个用户输入的4位整数,加密的过程:每个数位加7后的结果除以10,用得到的余数替换该数位,然后,将第一个数位和第三个数位交换,第二个数位和第四个数位交换,接着打印加密后的整数。
制作两个程序,一个加密,一个解密。
我做的有问题,有的对,有的又不对郁闷~~~看看各位的答案。

解决方案 »

  1.   

    用StringBuffer 获取输入的值,然后逐个分解得到每个char类型的字符,可以用字符操作每一位了。String str="1234";
    StringBuffer sb=new StringBuffer(str);
    sb.reverse();//反转字符串
      

  2.   


    import java.util.Arrays;
    import java.util.Scanner;public class Test {
    public static void main(String[] args) { Scanner scan = null;
    int numToEncode = 0;
    String result = null;

    System.out.println("请输入一个四位整数");

    try {
    scan = new Scanner(System.in);
    numToEncode = scan.nextInt();
    System.out.println("您输入的四位整数是: " + numToEncode);
    } catch (NumberFormatException e) {
    e.printStackTrace();
    } finally {
    scan.close();
    }
    result = encodeNumber(numToEncode);
    System.out.println(numToEncode + "加密后为:" + result);
    System.out.println(result + "解密后为:" + descodeNumber(result)); } private static String descodeNumber(String result) {
    int[] j = new int[4];
    String num = "";

    for (int i = 0; i < 4; i++)
    j[(i + 2) % 4] = Integer.parseInt("" + result.charAt(i));

    j[0] = (j[0] + 3) % 10;
    j[1] = (j[1] + 3) % 10;
    j[2] = (j[2] + 3) % 10;
    j[3] = (j[3] + 3) % 10;

    for (int t : j)
    num += t;

    return num;
    } private static String encodeNumber(int s) {
    int[] j = new int[4];
    String num = "";

    j[0] = (s % 100 / 10 + 7) % 10;
    j[1] = (s % 10 + 7) % 10;
    j[2] = (s / 1000 + 7) % 10;
    j[3] = (s % 1000 / 100 + 7) % 10;

    for (int i : j)
    num += i;

    return num;
    }}
      

  3.   


    import java.util.Arrays;
    import java.util.Scanner;public class Test {
    public static void main(String[] args) { Scanner scan = null;
    int numToEncode = 0;
    String result = null;

    System.out.println("请输入一个四位整数");

    try {
    scan = new Scanner(System.in);
    numToEncode = scan.nextInt();
    System.out.println("您输入的四位整数是: " + numToEncode);
    } catch (NumberFormatException e) {
    e.printStackTrace();
    } finally {
    scan.close();
    }
    result = encodeNumber(numToEncode);
    System.out.println(numToEncode + "加密后为:" + result);
    System.out.println(result + "解密后为:" + descodeNumber(result)); } private static String descodeNumber(String result) {
    int[] j = new int[4];
    String num = "";

    for (int i = 0; i < 4; i++)
    j[(i + 2) % 4] = Integer.parseInt("" + result.charAt(i));

    j[0] = (j[0] + 3) % 10;
    j[1] = (j[1] + 3) % 10;
    j[2] = (j[2] + 3) % 10;
    j[3] = (j[3] + 3) % 10;

    for (int t : j)
    num += t;

    return num;
    } private static String encodeNumber(int s) {
    int[] j = new int[4];
    String num = "";

    j[0] = (s % 100 / 10 + 7) % 10;
    j[1] = (s % 10 + 7) % 10;
    j[2] = (s / 1000 + 7) % 10;
    j[3] = (s % 1000 / 100 + 7) % 10;

    for (int i : j)
    num += i;

    return num;
    }}
      

  4.   


    public class code 
    {
    public static void main(String[] args)
    {
    int[] a=new int[4];
    int[] b=new int[4];
    Random ran=new Random();
    a[0]=ran.nextInt(9);
    a[1]=ran.nextInt(9);
    a[2]=ran.nextInt(9);
    a[3]=ran.nextInt(9);
    for(int index=4;index>0;index--)
    {
    b[index-1]=(a[index-1]>=3)?1:0;
    }

    System.out.println(a[0]+""+a[1]+""+a[2]+""+a[3]);
    a=exe(a,b);
    for(int index=0;index<4;index++)
    System.out.println(a[index]);
    a=rexe(a,b);
    for(int index=0;index<4;index++)
    System.out.println(a[index]);
    }
       public static int[] exe(int[] a,int[] b)
       {
       a[0]=(a[0]+7)%10;
       a[1]=(a[1]+7)%10;
       a[2]=(a[2]+7)%10;
       a[3]=(a[3]+7)%10;
       swap(a);
       swap(b);
       return a;
       }
       public static int[] rexe(int[] a,int[] b)
       {
       for(int index=0;index<4;index++)
       a[index]+=b[index]*10-7;
       swap(a);
       return a;
       }
       public static void swap(int[] a)
       {
       a[0]+=a[2];
       a[2]=a[0]-a[2];
       a[0]=a[0]-a[2];
       a[1]+=a[3];
       a[3]=a[1]-a[3];
       a[1]=a[1]-a[3];
       }
    写的很差劲...大家提意见
      

  5.   


    public static void main(String[] args)
    {
    int   size=4;
    int[] a=new int[size];
    int[] b=new int[size];
    int[] swaporder=new int[size];
    int   modnumber=10;
    int   plusnumber=7;
    Random ran=new Random();
    for(int index=0;index<size;index++)
    {
    a[index]=ran.nextInt(modnumber);
    System.out.print(a[index]);
    }
    System.out.println();

    a=exe(a,b,modnumber,plusnumber);
    for(int index=0;index<4;index++)
    System.out.print(a[index]);
    System.out.println();
    a=rexe(a,b,modnumber,plusnumber);
    for(int index=0;index<4;index++)
    System.out.print(a[index]);
    System.out.println();
    }
       public static int[] exe(int[] a,int[] b,int modnumber,int plusnumber)
       {
       for(int index=a.length;index>0;index--)
    {
    b[index-1]=(a[index-1]+plusnumber)/modnumber;
    }
       a[0]=(a[0]+plusnumber)%modnumber;
       a[1]=(a[1]+plusnumber)%modnumber;
       a[2]=(a[2]+plusnumber)%modnumber;
       a[3]=(a[3]+plusnumber)%modnumber;
       swap(a);
       swap(b);
       return a;
       }
       public static int[] rexe(int[] a,int[] b,int modnumber,int plusnumber)
       {
       for(int index=0;index<a.length;index++)
       a[index]+=b[index]*modnumber-plusnumber;
       swap(a);
       return a;
       }
       public static void swap(int[] a)
       {
       a[0]+=a[2];
       a[2]=a[0]-a[2];
       a[0]=a[0]-a[2];
       a[1]+=a[3];
       a[3]=a[1]-a[3];
       a[1]=a[1]-a[3];
       }不知道怎么把交换顺序一般化
    将就吧...