继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

利用java基础轻轻松松解决公司密码加密问题

果果爱吃苹果
关注TA
已关注
手记 15
粉丝 78
获赞 3191

//题目 某公司采用公用电话传递信息,数据是小于8位的整数,为了确保安全需要在过程中加密
//现将数字倒序,然后将每位数字都加上5,用得到的和除以10的余数代替该数字,最后将第一位和最后一位数字交换
// 22346 64322 19877 79871
// 方法一
/*

  • 思路 : 1.先输入字符串,并分割 2. 输入数组 3. 数组倒序输出 4. 数组+5并且%10 5.
  • 最后一个位和第一位相互转换
    */
    Scanner sc = new Scanner(System.in);//java的包,童工用户在控制台输入
    System.out.println("请将要输入的数每一个用‘,’隔开");
    String s = sc.nextLine();
    String[] arr = s.split(",");//将字符串分割为字符,并返回数组
    int a[] = new int[arr.length]; //定义一个int数组接收强制转换后的arr数组
    int b[]=new int[a.length];
    for (int i = 0; i < arr.length; i++) {
    a[i] = Integer.parseInt(arr[i]); //遍历接收
    }
    for (int i = a.length - 1; i >= 0; i--) {
    b[a.length - i - 1] = (a[i] + 5) % 10; //倒序输出,并+5后%10
    }
    for (int i = 0; i < b.length; i++) {
    if (i == 0) { //最后一位和第一位交换
    int temp = b[0];
    b[0] = b[b.length - 1];
    b[b.length - 1] = temp;
    }
    }

    for (int i = 0; i < b.length; i++) {
        System.out.print(b[i]);  //输出加密后的数字
    }

// 方法二 做输入端的思考,直接将数字单个存入数组,缺点输入麻烦
// 思路 : 1.先单个数输入,并判断输入了几个数 2. 输入数组 3. 数组倒序输出 4. 数组+5并且%10 5.
// 最后一个位和第一位相互转换

      Scanner sc=new Scanner(System.in);
      System.out.println("输入你想要输入的数有几位"); 
      int wei=sc.nextInt(); 
      int []a=new int [wei];
      int [] b=new int [a.length];
      for (int i = 0; i <a.length; i++) { 
          System.out.println("请输入第"+i+"个数");
      a[i]=sc.nextInt(); 
      while (a[i]>9||a[i]<0) {//判断 是否输入的数大于9或者为负数的话
      System.out.println("请重新输入第"+i+"个数");
      a[i]=sc.nextInt();
      break; 
      }
      }
      for (int i = a.length-1; i >=0; i--) {
          b[a.length-i-1]=(a[i]+5)%10;
          }
      for (int i = 0; i< b.length; i++) {
          if(i==0) {
              int temp=b[0];
      b[0]=b[b.length-1];
      b[b.length-1]=temp;
      } 
          } 
      for (int i = 0; i<b.length; i++) {
          System.out.print(b[i]);
          } 
      System.out.println();

     for (int i = 0; i < a.length; i++) { 
         System.out.print(b[i]);
         }

    // 方法三,最浪费算法复杂度的一种

     // 思路:1. 先确定你的数有几位 2. 输入一个数,并且通过取模截取个位,十位.... 3.. 然后判断 倒序 4. +5且 %10
    // 5. 最后一位和第一位相换

      Scanner sc=new Scanner(System.in);
      System.out.println("输入你想要输入的数有几位"); 
      int wei=sc.nextInt();
      System.out.println("输入你想要输入的数");
      int number=sc.nextInt(); 
      int []a=new int [wei];  
      int [] b=new  int[a.length];
      //通过这个数组直接倒序 
      for(int i = 0; i < a.length; i++) { 
          if (i==0) { a[i]=number%10; 
          } 
     else {

      a[i]=(int) ((number/(Math.pow(10, i)))%10);
          }
      }
for (int i = 0;i < a.length; i++) { 
         a[i]=(a[i]+5)%10;
     }
      for (int i = 0; i < a.length; i++)
      { if(i==0) { 
          int temp=a[a.length-1];
      a[a.length-1]=a[0]; 
      a[0]=temp;

      } 
      } 
      for (int i = 0; i < a.length; i++) {
          System.out.print(a[i]);
          }
      }

    // 方法四 最麻烦的 自己定义变量 ,然后取模 ,胜在好理解 我就不写了
    // int ge=number/10的n次方去于10 等等 太麻烦了
    // 解密方法 反写就可以
打开App,阅读手记
14人推荐
发表评论
随时随地看视频慕课网APP

热门评论

或许直接输入字符串,然后当输入到最后一位的时候,提示回车进行判断,然后直接字符串按字符数进行整合 str.charAt[i]

Learn......

2522524

查看全部评论