排它平方数

flag

软件学院大三党,每日一道算法题,第三天

题目介绍

小明正看着 203879 这个数字发呆。 原来,203879 * 203879 = 41566646641 这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。 具有这样特点的6位数还有一个,请你找出它!

思路

①由于位数过长,计算时整数采用long
②先利用循环和判断条件找到符合每位数字都不同的六位数
③将计算的积转换为string,之后利用contains()方法检验结果中是否包括乘数的数字。

关键代码

    public static void main(String[] args) {
        long a,b,c,d,e,f;//定义各数位
        for(a=1;a<10;a++){//0不能开头
            for(b=0;b<10;b++){
                if(a==b)continue;//值相等就跳过循环
                for(c=0;c<10;c++){
                    if (c == a || c == b) continue;
                    for(d=0;d<10;d++){
                        if (d == a || d == b || d == c) continue;
                        for(e=0;e<10;e++){
                            if (e == a || e == b || e == c||e == d) continue;
                            for(f=0;f<10;f++){
                                if (f == a || f == b || f == c||f == d||f == e) continue;
                                check(a,b,c,d,e,f);//检验是否符合条件
                            }
                        }
                    }
                }
            }
        }
    }

    public static void check(long a,long b,long c,long d,long e,long f){
        long x=a*100000+b*10000+c*1000+d*100+e*10+f;//x为六位数乘数
        long result=x*x;//result为乘积
        String s=String.valueOf(result);//强制转换为string
        if(!s.contains(String.valueOf(a))&&!s.contains(String.valueOf(b))&&
                !s.contains(String.valueOf(c))&&!s.contains(String.valueOf(d))&&
                !s.contains(String.valueOf(e))&&!s.contains(String.valueOf(f))){
            System.out.println("该六位数为:"+x+"乘积为:"+result);
        }
    }

运行结果

结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值