2016.3.31【i码邦】每日一练

某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
 
现有电话号码为35103786(只取后四位数),请用该公司的传递数据方法,输出最终的传递数。

不限形式,不限格局,百花齐放才是编程的春天!!
 
点滴成就未来,现在开始在【i码邦】为未来累积高度!
每日一练.jpg



--来自网页客户端
已邀请:

ziyou8513 - 在自学Java的道路上缓慢爬行ing

赞同来自: admin tttrrr

public class Day0331 {
    
    public void encryptNum(int phoneNumber){
        int[] arr = new int[4];
        //获得电话号码的后四位
        for(int i=3;i>=0;i--){
            arr[i]=phoneNumber;
            phoneNumber/= 10;
        }
        //每位数加5,并除10取余
        for(int i=0;i<4;i++){
            arr[i]=arr[i]+5;
            arr[i]=arr[i];
        }
        //第一位与第四位交换,第二位与第三位交换 ==> 即倒序输出
        for(int i=3;i>=0;i--){
            System.out.print(arr[i]);
        }    
    }
    
    public static void main(String args) {
        int phoneNumber = 35103786;
        Day0331 test = new Day0331();
        test.encryptNum(phoneNumber);
    }

}

--来自网页客户端

未探索的星球 - まあ、どうせ俺は醜いものだろう

赞同来自: a513470086 人生信条

import java.util.Arrays;

public class Test0331 {
    /*
     * 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的
     * 加密规则如下:
     *         1.每位数字都加上5,然后用和除以10的余数代替该数字
     *         2.再将第一位和第四位交换,第二位和第三位交换。
     * 现有电话号码为35103786(只取后四位数),请用该公司的传递数据方法,输出最终的传递数。
     * 
     * 例:
     *         3456 ->  9 8 10 11 -> 9801
     *         9801 -> 1089
     */
    
    
    public static void main(String[] args) throws Exception {
        int num = 698;
        System.out.println("编码前的数: " + num);
        String encode = new Test0331().numEncode(num);
        System.out.println("编码后的数: " + encode);
    }
    
    
    
    /**
     * 具体实现编码的方法
     * @param num 要进行编码的数据,如果位数不够4位会进行自动补零操作
     * @return 编码后的数据
     * @throws Exception
     */
    @SuppressWarnings("unused")
    public String numEncode(int num) throws Exception{
        StringBuffer numStr = new StringBuffer();
        int prefixZero;
        
        if(num > 9999 || num < 0){
            throw new Exception("数据不正确");
        }else if(num >= 100 && num <= 999){
            prefixZero = 1;
        }else if(num >= 10 && num <= 99){
            prefixZero = 2;
        }else if(num >= 0 && num <= 9){
            prefixZero = 3;
        }
        prefixZero(num, 4);
        
        int[] nums  = new int[]{
            (num / 1000 % 10 + 5),
            (num / 100 % 10 + 5),
            (num / 10 % 10 + 5),
            (num / 1 % 10 + 5)
        };
        
        System.out.println("编码时 +5 之后的数: " + Arrays.toString(nums));
        
        for (int i = 0; i < nums.length; i++) {
            nums[i] = nums[i] % 10;
        }
        
        System.out.println("编码时之后取余的数: " + Arrays.toString(nums));
        
        changeTwoItemInIntArray(nums, 0, 3);
        changeTwoItemInIntArray(nums, 1, 2);

        
        for (int i = 0; i < nums.length; i++) {
            numStr.append(nums[i]);
        }
        
        return numStr.toString();
    }
    
    
    /**
     * 给数字字符串加前导零并返回
     * @param num 数字字符串
     * @param len 需要达到的长度 
     *                     若num的长度大于等于len则返回str  
     *                     若num的长度小于len则返回加入前导零之后的str
     * @return 
     * @throws Exception 
     */
    public String prefixZero(int num, int len) throws Exception{
        StringBuffer sb = new StringBuffer();
        sb.append(num);
        if(len < 0){
            throw new Exception("数据不正确");
        }
        
        int temp = sb.length();
        if(temp >= len){
            return sb.toString();
        }
        
        temp = len - temp;
        sb = new StringBuffer();
        for (int i = 0; i < temp; i++) {
            sb.append("0");
        }
        sb.append(num);
        System.out.println("补零之后的数:" + sb.toString());
        return sb.toString();
    }
    
    
    /**
     * 交换int数组中的两个值
     * @param array   要使用的数组
     * @param beChangeIndex    要交换的数组索引1
     * @param toChangeIndex 要交换的数组索引2
     * @throws Exception 
     */
    public static void changeTwoItemInIntArray(int[] array, int beChangeIndex, int toChangeIndex) throws Exception{
        if(beChangeIndex > array.length || beChangeIndex < 0)
            throw new Exception();
        if(toChangeIndex > array.length || toChangeIndex < 0)
            throw new Exception();
        int temp  = array[beChangeIndex];
        array[beChangeIndex] = array[toChangeIndex];
        array[toChangeIndex] = temp;
    }
    
    
}

0331.png

 
 

--来自网页客户端

tuogoudeyu - 此人很懒

赞同来自: admin 未探索的星球 小陈 Mng

package imaDay0331;

import java.util.Arrays;

/**
 * 某个公司采用公用电话传递数据,数据是四位的整数,
 * 在传递过程中是加密的,加密规则如下:每位数字都加
 * 上5,然后用和除以10的余数代替该数字,再将第一位和
 * 第四位交换,第二位和第三位交换。现有电话号码为
 * 35103786(只取后四位数),请用该公司的传递数据
 * 方法,输出最终的传递数。
 * 
 *
 */
public class SafeNum {
    public static void main(String[] args) {
        String str = "35103786";
        int numlen=4;  // 取4位数
        char [] numchar= new char[numlen]; //定义char数组,长度为要求的4位,用于取出最后4位数字
        int [] num=new int[numlen];     //定义int数组,长度为要求的4位,用于保存最终转换的4位数字
        for(int i=0;i<numlen;i++){  //循环4次(取4位数)
            /*
             * charAt(index)获取字符串对应下标的字符 
             * str.length()获取字符串str的长度
             * str.length()-numlen表示从倒数第4(numlen)位
             */
            numchar [i] =str.charAt(str.length()-numlen+i);
            //通过Unicode值将char转换为int, '0' =48(int类型),即char-48为字符0-9对应的int值
            num [numlen-1-i] =(numchar[i]-48+5);
            /*将int值加5取10的余数赋值给num
            将第一位和第四位交换,第二位和第三位交换    ,其实就是倒序,
            故直接倒序赋值 即num[3] = numchar[0] ,num[2]=numchar[1]...     
            */                            
        }
        System.out.println("原四位数:"+Arrays.toString(numchar));
        System.out.println("现四位数:"+Arrays.toString(num));//num即为转换并排序后的int型数组
        
    }

QQ截图20160401005613.png

 

--来自网页客户端

admin

赞同来自: a513470086

楼上都是最棒的,在【i码邦】留下每一天的编程记录,是自己前进的最好实践。
CMS_121116143634346_0E_400x366.jpg

 

--来自网页客户端

溪水木鱼

赞同来自: admin

真多不错呀,期待更多视频可以下载

--来自移动客户端

admin

赞同来自: 小昭

public class Tst0331 {
    
    public static void main(String[] args) {
        
        int hh = 35103786;
        int[] aa1 = new int[4];
        for(int j=0; j<4; j++){
            aa1[j] = hh;
            hh = hh/10;
            System.out.println("========="+aa1[j]);
            aa1[j] = (aa1[j]+5);
            System.out.println("************"+aa1[j]);
        }
}
}

--来自网页客户端

a513470086 - G i码邦(爱码邦) --没理由!

赞同来自:

package i码邦;

import java.util.*;
public class Test002   { 
    public static void main(String args[]) { 
        Scanner s = new Scanner(System.in);
        int num=0,temp;
        do{
            System.out.print("请输入一个4位正整数:");
            num = s.nextInt();
        }while (num<1000||num>9999); 
        int a[]=new int[4]; 
        a[0] = num/1000; //取千位的数字 
        a[1] = (num/100); //取百位的数字 
        a[2] = (num/10); //取十位的数字 
        a[3] = num; //取个位的数字 
        for(int j=0;j<4;j++) 
        { 
            a[j]+=5; 
            a[j]%=10; 
        } 
        for(int j=0;j<=1;j++) 
        { 
            temp = a[j]; 
            a[j] = a[3-j]; 
            a[3-j] =temp; 
        } 
        System.out.print("加密后的数字为:"); 
        for(int j=0;j<4;j++) 
            System.out.print(a[j]); 
    } 



 

--来自网页客户端

Muko - 什么都不会,着实很捉急。

赞同来自: yanghao8808

import java.util.Scanner;
public class DailyTest0331 {
    public static void main(String[] args) {

        int a = 0;
        int b = 0;
        int c = 0;
        int d = 0;
        int price;
        int change;

        Scanner in = new Scanner(System.in);
        price = in.nextInt();

        a = (price % 10000 / 1000 + 5 );
        b = (price % 1000 / 100 + 5 );
        c = (price % 100 / 10 + 5 );
        d = (price % 10 / 1 + 5 );

        change = d*1000+c*100+b*10+a*1;
        System.out.println(change);
    }
}

--来自网页客户端

microzone

赞同来自: Jackiewong

import java.util.Scanner;
public class Test{
    final int len=4;
    /**
     * 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,
     * 加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,
     * 再将第一位和第四位交换,第二位和第三位交换。
     * @param num
     */
    public void SafeNum(int num){
        double getNum;
        int[] arr=new int[len];
        //获取末尾四位的数字
        getNum=num%(Math.pow(10, len));
        arr[len-1]=(int)getNum;
        arr[len-2]=(int)getNum0/10;
        arr[len-3]=(int)getNum00/100;
        arr[len-4]=(int)getNum000/1000;
        System.out.print("加密前:");
        for (int i : arr) {
            System.out.print(i);
        }
        System.out.println();
        for(int i=0;i<len;i++){
            arr[i]+=5;
            arr[i]%=10;
        }
        System.out.print("加密后:");
        //第一位和第四位交换,第二位和第三位交换,也就是倒序输出
        for(int i=len-1;i>=0;i--){
            System.out.print(arr[i]);
        }
    }
    public static void main(String[] args) {
        System.out.println("请输入需要加密的完整数字:");
        Test s=new Test();
        Scanner in=new Scanner(System.in);
        int num=in.nextInt();
        s.SafeNum(num);
    }
}

--来自网页客户端

易丿天离

赞同来自:

image.png

15号开始学的java,就从15号开始做吧!

--来自移动客户端

admin

赞同来自:

每日一小步,点滴可以汇成大海,只有这种坚持动手的操作,才是学好编程,成为大神的唯一道路。加油,每一位i码邦的伙伴们!!
 
爱编程 i码邦!!
 

QQ截图20160406102536.png

 

--来自网页客户端

afangxin

赞同来自:

通过取商或取余数的方法实现整形数据的截取
IMGTMP_20160412_001721.jpg


--来自移动客户端

azhaoyueb

赞同来自:

新手看看

--来自移动客户端

winter1976 - 学习是一种信仰

赞同来自:

加密和解密算法一样

--来自移动客户端

滑翔biu

赞同来自:

没有正确程序的么?

--来自移动客户端

fengyun12

赞同来自: 燕燕

/**
* 每日一练 20160331
* 四位整数,加密规则如下:
* 每位数字加上5,然后用和除以10的余数代替该数字,
* 再将第一位和第四位交换,第二位和第三位交换
* 现有电话号码35103786(取后四位),输出最终传递数
*/
public void ex160331(){
String str="35103786";
String str1=str.substring(0, 4); //获取前四位,substring是前面包括后面不包括
char a=str.charAt(4); //获取第5位数字
char b=str.charAt(5); //获取第6位数字
char c=str.charAt(6); //获取第7位数字
char d=str.charAt(7); //获取第8位数字

int ls=('0'+5);
a=(char)('0'+ls); //计算转义以后的第一位数

ls=('0'+5);
b=(char)('0'+ls); //计算转义以后的第二位数

ls=('0'+5);
c=(char)('0'+ls); //计算转义以后的第三位数

ls=('0'+5);
d=(char)('0'+ls); //计算转义以后的第四位数

System.out.println(str1+d+c+b+a);
}

--来自移动客户端

lanlan2501 - 上善若水任方圆

赞同来自:

/*******************************************************
某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:
每位数字都加上5,然后用和除以10的余数代替该数字,
再将第一位和第四位交换,第二位和第三位交换。
 
现有电话号码为35103786(只取后四位数),
请用该公司的传递数据方法,输出最终的传递数。
********************************************************/
public class Ex0331{
    public static void main(String[] args){
        int m = 35103786;
        int n = m/10000*10000;
        int k;
        for(int i=10; i <= 10000; i=i*10 ){
                k = m*10/i;                
                k = (k+5);
                n = n + k*i/10;
                
         }
        
        System.out.println("最终输出"+n);
        
    }
}

--来自网页客户端

shao

赞同来自:

很难吗?多练练就好。

--来自移动客户端

Voi -

赞同来自:

666

--来自移动客户端

人生信条

赞同来自:

1328

--来自移动客户端

lanlan2501 - 上善若水任方圆

赞同来自:

/*******************************************************
某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:
每位数字都加上5,然后用和除以10的余数代替该数字,
再将第一位和第四位交换,第二位和第三位交换。
 
现有电话号码为35103786(只取后四位数),
请用该公司的传递数据方法,输出最终的传递数。
********************************************************/
public class Ex0331{
    public static void main(String[] args){
        int m = 35103786;
        int n = m/10000*10000;
        int k;
        for(int i=10; i <= 10000; i=i*10 ){
                k = m*10/i;                
                k = (k+5);
                n = n + k*i/10;
                
         }
        
        System.out.println("后四位加密输出"+n);
        m =n*1000+n000/1000+n00/100*10+n0/10*100+n/10000*10000;
        System.out.println("加密后最终输出"+m);
        
    }
}

--来自网页客户端
输入初始号码:35103786
最终传递数为:1328
--------上面为测试结果,下面为源码,希望对大家有用-------

import java.util.Scanner;

/**
* 4位数 1.每个数先加5; 2.执行第一步后每个数与10相除的余数代替该数; 3.第一和第四交换,第而和第三交换
*
* @author
*
*/
public class ExerciseTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("输入初始号码:");
String num = scan.nextLine();
int[] SendNumber = GetNumber(num);
System.out.print("最终传递数为:");
for(int e:SendNumber){
System.out.print(e);
}
scan.close();
}

public static int[] GetNumber(String num) {
String OldNumber = num.substring(num.length() - 4, num.length());
int[] TempNumber = new int[OldNumber.length()];
for (int i = 0; i < OldNumber.length(); i++) {
char e = OldNumber.charAt(i);
int temp = Integer.parseInt("" + e);
TempNumber[i] = (temp + 5) % 10;// 每个数先加5,后每个数与10相除的余数代替该数
}
// 第一和第四交换
int temp = 0;
temp = TempNumber[0];
TempNumber[0] = TempNumber[TempNumber.length - 1];
TempNumber[TempNumber.length - 1] = temp;
// 第二和第三交换
temp = TempNumber[1];
TempNumber[1] = TempNumber[TempNumber.length - 2];
TempNumber[TempNumber.length - 2] = temp;
return TempNumber;
}
}

--来自移动客户端

CA5697820ABE22 - 开心生活,开心工作。

赞同来自:

目前还不会写

--来自移动客户端

肚子疼

赞同来自:

/*用手机写的*/
class Test{
public void md5(){

int num = 35103786;

int a =(mum%10000/1000+5)%10;

int b=(mum%1000/100+5)%10;

int c=(mum%100/10+5)%10;

int d =(mum%10/1+5)%10;





























}


}

--来自移动客户端

wyxx - 暂无签名

赞同来自:

做了好久才做出来

--来自移动客户端

残枭殇

赞同来自:

IMGTMP_20170111_183553.jpg

刚学一个月,感觉写的方法比较笨,不过算是写出来了

--来自移动客户端

smalleyes325

赞同来自:

image.png


才学不久,只能做成这个样子。只能输入4位数字,对其进行加密。

--来自移动客户端

jackie_x

赞同来自:

image.png


--来自移动客户端

乱编码

赞同来自:

import java.util.Scanner;
public class Test{
public static void main(String[] args)
Scanner in=new Scanner(System.in)
System.out.println("请输入电话号码的倒数第四为数字");
int a=(in.nextInt()+5);
System.out.println("请输入电话号码的倒数第三为数字");
int b=(in.nextInt()+5);
System.out.println("请输入电话号码的倒数第二为数字");
int c=(in.nextInt()+5);
System.out.println("请输入电话号码的倒数第一为数字");
int d=(in.nextInt()+5);
System.out.println("该电话号码最后四位数字变化后的值为+a+b+c+d");
}

--来自移动客户端

要回复问题请先登录注册

Template error, template file not found