Thinking in Java
这个程序我自己敲出来的代码,用的方法很笨的感觉,将就着吧,目前没时间想那么多,得继续学啊。
1 class Vnum{ 2 public static void main(String args[]){ 3 CheckVampire cVampire = new CheckVampire(); 4 for(int i=1000;i<10000;i++){ 5 if(cVampire.isVampire(i)){ 6 System.out.println(i); 7 } 8 } 9 } 10 11 static class CheckVampire{ 12 // 将num拆分为每一个,保存在numArr[]中 13 void EveryBit(int num,int numArr[]){ 14 if((1000>num)||(10000<num)){ 15 numArr[0]=numArr[1]=numArr[2]=numArr[3]=0; 16 return; 17 }else if(num%100==0){ 18 numArr[0]=numArr[1]=numArr[2]=numArr[3]=0; 19 return; 20 }else{ 21 numArr[3]=num/1000; 22 numArr[2]=num%1000/100; 23 numArr[1]=num%100/10; 24 numArr[0]=num%10; 25 } 26 } 27 //输入一个num,返回值为true则该num为吸血鬼数字 28 //由于是检测1000~9999以内的吸血鬼数字,则使用穷举法= =,网上应该有更好的办法 29 boolean isVampire(int num){ 30 int numEveryBit[]=new int[4]; 31 EveryBit(num,numEveryBit); 32 if(num==(numEveryBit[0]*10+numEveryBit[1])*(numEveryBit[2]*10+numEveryBit[3])){ 33 return true; 34 } 35 else if(num==(numEveryBit[0]*10+numEveryBit[1])*(numEveryBit[3]*10+numEveryBit[2])){ 36 return true; 37 } 38 else if(num==(numEveryBit[1]*10+numEveryBit[0])*(numEveryBit[2]*10+numEveryBit[3])){ 39 return true; 40 } 41 else if(num==(numEveryBit[1]*10+numEveryBit[0])*(numEveryBit[3]*10+numEveryBit[2])){ 42 return true; 43 } 44 45 else if(num==(numEveryBit[0]*10+numEveryBit[2])*(numEveryBit[1]*10+numEveryBit[3])){ 46 return true; 47 } 48 else if(num==(numEveryBit[0]*10+numEveryBit[2])*(numEveryBit[3]*10+numEveryBit[1])){ 49 return true; 50 } 51 else if(num==(numEveryBit[2]*10+numEveryBit[0])*(numEveryBit[1]*10+numEveryBit[3])){ 52 return true; 53 } 54 else if(num==(numEveryBit[2]*10+numEveryBit[0])*(numEveryBit[3]*10+numEveryBit[1])){ 55 return true; 56 } 57 58 else if(num==(numEveryBit[0]*10+numEveryBit[3])*(numEveryBit[1]*10+numEveryBit[2])){ 59 return true; 60 } 61 else if(num==(numEveryBit[0]*10+numEveryBit[3])*(numEveryBit[2]*10+numEveryBit[1])){ 62 return true; 63 } 64 else if(num==(numEveryBit[3]*10+numEveryBit[0])*(numEveryBit[1]*10+numEveryBit[2])){ 65 return true; 66 } 67 else if(num==(numEveryBit[3]*10+numEveryBit[0])*(numEveryBit[2]*10+numEveryBit[1])){ 68 return true; 69 } 70 else{ 71 return false; 72 } 73 } 74 } 75 }