A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 idency 于 2014-6-6 21:05 编辑

        某个公司采用公用电话传递数据信息,数据是小于8位的整数,
        为了确保安全,在传递过程中需要加密,加密规则如下:
        首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,
        最后将第一位和最后一位数字交换。
        请任意给定一个小于8位的整数,
        然后,把加密后的结果在控制台打印出来。       

class JiaMi{
        public static void main(String[] args){
                int num = 1234;
                int[] arr = new int[7];
               
                /*
                arr[0] = num % 10; //1234567 % 10 = 7
                num = num / 10; //123456
                arr[1] = num % 10; //123456 % 10 = 6
                num = num / 10;// 12345
                arr[2] = num % 10;//12345 % 10 = 5
                */
                int index = 0;
                /*
                while(num != 0){
                        arr[index++] = num % 10;
                        num = num / 10;
                        //index++;  
                }
               
                for(int x = 0 ;x < index;x++){
                                arr[x] = (arr[x] + 5) % 10;
                                //arr[x] += 5;
                }*/
               
                while(num != 0){
                        arr[index++] = (num % 10 + 5 ) % 10;
                        num = num / 10;
                        //index++;  
                }
               
               
                int temp = arr[0];
                arr[0] = arr[index-1];
                arr[index-1] = temp;
               
                for(int x = 0 ;x < index;x++){
                                System.out.print(arr[x]);
                }
                System.out.println();
        }
}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

25 个回复

倒序浏览
我刚学到继承,不知道我能做这道题吗?超过我学的范围了吧?
回复 使用道具 举报 1 0
沐阳6011 发表于 2014-6-5 21:50
我刚学到继承,不知道我能做这道题吗?超过我学的范围了吧?

可以,这个用不到继承,只是简单地运算符,语句的应用和简单函数的应用,我们老师给题的时候我们还没开始面向对象呢!  加油
回复 使用道具 举报 1 0
idency 发表于 2014-6-5 22:03
可以,这个用不到继承,只是简单地运算符,语句的应用和简单函数的应用,我们老师给题的时候我们还没开始面向 ...

行,那我试试,确实没怎么做过题,真一看就蒙
回复 使用道具 举报 1 0
试一试,练练手!!!!!!!
回复 使用道具 举报 1 0
每位数字都加上5,再用和除以10的余数代替该数字
这里 和指的是当前数加上5之后%10吗?
回复 使用道具 举报
饥渴ing 发表于 2014-6-5 22:39
每位数字都加上5,再用和除以10的余数代替该数字
这里 和指的是当前数加上5之后%10吗? ...

是的,正解
回复 使用道具 举报
沐阳6011 发表于 2014-6-5 22:16
行,那我试试,确实没怎么做过题,真一看就蒙

恩恩,刚开始都这样,学习知识一方面,能够把知识综合起来运用是另一回事,所以还是要多练习题目,加油
回复 使用道具 举报
idency 发表于 2014-6-5 22:42
恩恩,刚开始都这样,学习知识一方面,能够把知识综合起来运用是另一回事,所以还是要多练习题目,加油 ...

将每位数字都加上5,再用和除以10的余数代替该数字。这里的和指的是什么和?
回复 使用道具 举报
沐阳6011 发表于 2014-6-5 23:03
将每位数字都加上5,再用和除以10的余数代替该数字。这里的和指的是什么和? ...

就是该位数+5之后的和,例如:个位是6,6+5+11,  和就是11,
回复 使用道具 举报
idency 发表于 2014-6-5 23:14
就是该位数+5之后的和,例如:个位是6,6+5+11,  和就是11,

然后每个位上和再%10得到一个新数。懂了
回复 使用道具 举报
public static void main(String[] args) {

                int jiami = jiami(123402);
                //
                System.out.println(jiemi(jiami));
        }

        public static int jiami(int data) {
                if (data > 9999999) { // 大于8位数抛异常
                        throw new RuntimeException();
                }
                StringBuffer sb = new StringBuffer();
                sb.append(data);
                // 交换
                sb.reverse();

                for (int i = 0; i < sb.length(); i++) {
                        int temp = Character.getNumericValue(sb.charAt(i));
                        // 前数加上5之后%10
                        temp = (temp + 5) % 10;
                        // 将原来的树删掉然后插入
                        sb.delete(i, i + 1);
                        sb.insert(i, temp);
                }
                // 最后将第一位和最后一位数字交换。 //这个放前面后面没影响吧
                char temp = sb.charAt(0);
                sb.setCharAt(0, sb.charAt(sb.length() - 1));
                sb.setCharAt(sb.length() - 1, temp);

                return Integer.parseInt(sb.toString());
        }

        public static int jiemi(int data) {// 解密
                if (data > 9999999) { // 大于8位数抛异常
                        throw new RuntimeException();
                }
                StringBuffer sb = new StringBuffer();
                sb.append(data);

                // 将第一位和最后一位数字交换。
                char temp = sb.charAt(0);
                sb.setCharAt(0, sb.charAt(sb.length() - 1));
                sb.setCharAt(sb.length() - 1, temp);

                for (int i = 0; i < sb.length(); i++) {
                        int t = Character.getNumericValue(sb.charAt(i));
                        // 前数加上5之后%10
                        t = Math.abs((t - 5)) % 10;
                        // 将原来的树删掉然后插入
                        sb.delete(i, i + 1);
                        sb.insert(i, t);
                }
                sb.reverse();

                return Integer.parseInt(sb.toString());
        }
晕了//等明天有空在试试其他的方法.
回复 使用道具 举报
本帖最后由 hengxing0079 于 2014-6-6 00:31 编辑

以前做过类似的题,刚刚找出一看几乎一样,附上源码大家可参考下!




------------------------------------------------------------------------------------------------
案例 4:加密传输
功能描述:
某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的。
加密规则是每位数字都加上5,然后再用除以10 的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
编写一个程序,用于接收一个四位的整数,并且打印输出加密后的数。





-------------------------------------------------------------------------------------------------
源代码:↓

import java.util.*;
public class Encrypt {

        public static void main(String[] args) {
                int[] a = new int[4];
                int temp;    //临时变量,用于作交换
                int i;
                Scanner input =new Scanner(System.in);
                System.out.print("请输入一个4位数字: ");
                int num = input.nextInt();
                int t = num;
                for(i = 0; i < 4; i++){   //分解
                        a
= t % 10;
                        t = t / 10;
                }
                for(i = 0; i < 4; i++){
                        a
= a + 5;
                        a
= a % 10;
                }
                for(i = 0; i <=1; i++){   //交换
                        temp = a
;
                        a
= a[3-i];
                        a[3-i] = temp;
                }
                System.out.print("加密后的4位数字是:");
                for(i = 3; i >= 0; i--){   //输出
                        System.out.print(a
);
                }
        }
}



回复 使用道具 举报
不调用输入流这题怎么做啊,愁死我了。
回复 使用道具 举报
好像很简单的样子
回复 使用道具 举报
我只是来看看
回复 使用道具 举报
练练手!
回复 使用道具 举报
这样子的啊  学习一下
回复 使用道具 举报
hengxing0079 发表于 2014-6-6 00:24
以前做过类似的题,刚刚找出一看几乎一样,附上源码大家可参考下!

这个不一样滴,这个是可能是7位数也可能是6位数也可能是5位数,每种情况都要考虑的
回复 使用道具 举报
沐阳6011 发表于 2014-6-6 10:21
不调用输入流这题怎么做啊,愁死我了。

:lol加油吧!  就数组和基本算法基本搞定  然后就是循环什么什么的
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马