美文网首页
数字算法

数字算法

作者: 晨雪落客 | 来源:发表于2019-03-01 13:29 被阅读0次

    public class Test5 {

    /*** 639172每个位数上的数字都是不同的,且平方后所得数字的所有位数都不会出现组成它自身的数字。

    * (639172*639172=408540845584),类似于639172这样的6位数还有几个?分别是什么?

    *分析:

    * 1. 6位数的范围是:100000-999999

    *    2. 6位数的各个数字不重复(将6位数说循环取10的余数,然后将i= i/10在进行10的余  数,可以获取6位数的每个数子)

    *    3. 6位数平方后的各个位数和6位数不重复

    */

    //判断六位数每一位是否重复

    public  static boolean isRepeat(long i){

    //将6位数说循环取10的余数,然后将i= i/10在进行10的余数,可以获取6位数的每个数子

    //创建新的map存放不重复的数字

    HashMap<Long, String> map= new HashMap<Long,String>();

    while(i!= 0){

    //map的key是否包含重复数字

    if(map.containsKey(i%10)){

    return true;

    }else{

    //map不包含重复的数字时,将取余获取到的数字放到map的key中

    map.put(i%10, "1");

    }

    //获取除过10后获取到的结果(目的时,可以进行取10余数的继续操作,获取十位,百位,千位,万位,十万位上的数字)

    i = i/10;

    }

    return false;

    }

    //排队拿六位数平方后的结果是否和六位数重复

    public static boolean isPingFangrepeat(long res,long i){

    //创建一个map存放六位数的每个位数的数字

    HashMap<Long, String> map= new HashMap<Long,String>();

    //循环获取六位数各个位数上的数字,并放入map集合中

    while(i!=0){

    map.put(i%10, "1");

    i = i/10;

    }

    //循环判断平方后的结果的各个数位上的数字是否在map中

    while(res!=0){

    if(map.containsKey(res%10)){

    return true;

    }

    res = res /10;

    }

    return  false;

    }

    public static void main(String[] args) {

    for(long  i=100000;i<= 999999;i++){

    //判断6位数中是否又重复的数据

    //如果包含重复的数据,就跳过,继续遍历下一个数据

    if(isRepeat(i)){

    continue;

    }else if(isPingFangrepeat(i*i,i)){

    continue;

    }else {

    System.out.println(i); //输出结果:203879,639172

    }

    }

    }

    }

    相关文章

      网友评论

          本文标题:数字算法

          本文链接:https://www.haomeiwen.com/subject/yelduqtx.html