题目如下:
解法一:简单、讨巧了
1 class test 2 { 3 public static void main(String[] args) 4 { 5 int a,b,c,d,e; 6 7 for(a=0;a<=1;a++) 8 for(b=0;b<=1;b++) 9 for(c=0;c<=1;c++) 10 for(d=0;d<=1;d++) 11 for(e=0;e<=1;e++) 12 System.out.printf("%d%d%d%d%d\n",a,b,c,d,e); 13 } 14 }
解法二:二进制数1-5位的权值分别为:1、2、4、8、16,如果对应的十进制数位X,则X=a*1+b*2+c*4+d*8+e*16,其中,a、b、c、d、e要么是0要么是1。观察表达式可以知道,(int)(X/16)即为高位的二进制位,(X%16)再除以相应的权即可得到次高位的二进制位、、、
1 class test 2 { 3 public static void main(String [] args) 4 { 5 int[] Arr={1,2,4,8,16};//权值 6 int[] Res=new int[5]; 7 int num,Tem,Sh; 8 int j,k,i; 9 10 for(k=0;k<5;k++) //清零 11 Res[k]=0; 12 for(j=0;j<32;j++) 13 { 14 num=j; 15 for(i=4;i>=0;i--) 16 { 17 Tem=Arr[i]; //取权值待用 18 Sh=(int)(num/Tem); //num<32,Sh要么是0要么是1 19 Res[i]=Sh; 20 num=num-Tem*Sh; 21 } 22 23 for(k=4;k>=0;k--) //打印数组 24 System.out.print(Res[k]); 25 System.out.println(); 26 } 27 } 28 }
解法三:
类似解法二,(X%2)即为最低位的二进制位,(int)(X/2))再除以2可得次低位的二进制位、、、
1 class test 2 { 3 public static void main(String[] args) 4 { 5 int[] res=new int[5]; 6 int i,j,h; 7 int temp; 8 9 for(i=0;i<5;i++) 10 res[i]=0; 11 for(i=0,j=0;j<32;j++,i=0) 12 { 13 res[i]=j; //先把需要打印的二进制数赋给最低位 14 while(res[i]>=2) //当前位大于2,需要调整 15 { 16 temp=res[i]/2; //余数即为最低位,而商 17 res[i]=res[i]%2; //再赋给高一位 18 res[++i]=temp; 19 } 20 21 for(h=4;h>=0;h--) //打印数组 22 System.out.printf("%d",res[h]); 23 System.out.printf("\n"); 24 } 25 26 } 27 }
解法四:
思维类似十进制一样,从00000开始,然后逐渐从低位加1,某一位满2,则需要相应的调整。但调整时,总是从最低位开始,即只有当最低位满2时,其他位才可能需要调整。
1 class test { 3 public static void main(String[] args) 4 { 5 int i,j; 6 int[]arr=new int[5]; 7 8 for(i=0;i<5;i++) 9 arr[i]=0; 10 System.out.printf("00000\n"); //先输出00000的情况 11 12 for(i=0,j=1;j<32;j++,i=0) 13 { 14 arr[i]=arr[i]+1; //个位数加1 15 while(arr[i]==2) //满2,当前位清零,并向高位进位,循环判断其它高位 16 { 17 arr[i++]=0; 18 arr[i]++; 19 } 20 21 for(i=4;i>=0;i--) 22 System.out.printf("%d",arr[i]); 23 System.out.printf("\n"); 24 25 } 26 } 27 }
时间: 2024-10-15 20:25:17