吸血鬼数字的算法

本文介绍了一种通过编程寻找吸血鬼数字的方法。作者使用Java编写了一个程序,该程序能够找出特定范围内的吸血鬼数字,并对代码进行了简单说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在看《Thinking in Java》的时候,碰到了一体关于吸血鬼数字的问题,就上机做了一下,下面是代码和结果(因为我刚接触编程4个多月,是个大一的学生,所以代码的风格不是太好,望海涵)!我的大概思路是对每一个四位数进行测试,将它拆分开来,然后进行检验是否可以表示成他自己的数字的乘积。很简单的想法。。。,麻烦高手耐心看一下,并且给我一些建议,感激不尽啊!

 

public class Vampire{

 
 public static void main(String[] args) {
  long t1=System.currentTimeMillis();
  Vampire v=new Vampire();

  v.getNumber();
  long t2=System.currentTimeMillis();
  System.out.println(t2-t1);

  //输出运行时间
 }
 
  
 public void getNumber()
 {  
  int num=1001;
  while(true)
  {   int i=num;
   if(num==99*99+1){//需要测试的最大数字
       break;
   }


   if(i==2000||i==3000||i==4000||i==5000||i==6000||i==7000||i==8000||i==9000)
   {  num++;
    continue;
   }//有三个零的数肯定是不可以的
   
   else {
        int []digits=new int [4];
        for(int n=0;n<4;n++)
        {
         digits[n]=i%10;
         i=i/10;
        }//把这个四位数拆分开来,取出他的各位数字
        

 

       //下面分为三种情况进行检测,是否符合要求,如果符合就输出该数并且将该数递增后回到循环体开始部分
        int a1=digits[0];
        int b1=digits [1];
        int c1=digits[2];
        int d1=digits[3];
        if(num==(a1*10+b1)*(c1*10+d1)||num==(a1*10+b1)*(d1*10+c1)   ||num==  (b1*10+a1)*(c1*10+d1)||num==(b1*10+a1)*(d1*10+c1)){
          System.out.println(num);
          num++;
          continue;
         }
       
         a1=digits[0];
         b1=digits[2];
         c1=digits[1];
         d1=digits[3];
        if(num==(a1*10+b1)*(c1*10+d1)||num==(a1*10+b1)*(d1*10+c1)||num==(b1*10+a1)*(c1*10+d1)||num==(b1*10+a1)*(d1*10+c1)){
          System.out.println(num);
          num++;
          continue;
         }
       
        a1=digits[0];
         b1=digits[3];
         c1=digits[1];
         d1=digits[2];
        if(num==(a1*10+b1)*(c1*10+d1)||num==(a1*10+b1)*(d1*10+c1)||num==(b1*10+a1)*(c1*10+d1)||num==(b1*10+a1)*(d1*10+c1)){
          System.out.println(num);
          num++;
          continue;
         }
        num++;//如果该数不是吸血鬼数字那么还是要递增后回到循环体开头的
        }
  }
 }

}

输出来的结果是:

1260
1395
1435
1530
1827
2187
6880
15

用了15毫秒,总觉得还有可以优化的地方,希望那位高手给我指点一下啊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值