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);
}
}