欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

试题 算法提高 输出二进制表示

程序员文章站 2022-07-14 23:17:30
...

问题描述
  输入[-128,127]内的整数,输出其二进制表示。提示,可使用按位与&输入格式  例:7输出格式  例:00000111样例输入一个满足题目要求的输入范例。

例:

7样例输出与上面的样例输入对应的输出。

例:

00000111数据规模和约定  输入数据中每一个数的范围。

例:0<n,m<100, 0<=矩阵中的每个数<=1000。

思路:
这题谈不上有什么思路,就是运用了系统的方法而已,不过再蓝桥杯练习系统上也能通过,我早上花了有一两个小时吧,打算把输入的数字用while循环转化为二进制,如果是输入的负数,我就把他的正数的二进制算出来,在转化为反码,在转化为补码(答案);可惜在最后转为补码的时候有点小差错,最后实在受不了了就用了系统定义的方法来求……

解决方法:
使用Integer.toBinaryString();将输入的数字转化为二进制

代码块:

import java.util.Scanner;
public class OutputErJinZhiBiaoShi_One {
 public static void main(String[] args){
  Scanner sc = new Scanner(System.in);
    int i = sc.nextInt();
  //将用户输入的数字转化为二进制
  String s =Integer.toBinaryString(i) ;
    //System.out.println(s);
  
  //如果该二进制数没有8位,则自动补0
  while(s.length() < 8){
     s = "0" + s;
  }
  //使用数组,遍历该二进制的最后8八位
  char[] arr = s.toCharArray();
  for(int x = s.length()-8; x < s.length(); x++){
   System.out.print(arr[x]);
  }
  }
  }

试题 算法提高 输出二进制表示

虽然我自己做的有点残缺,但是还是想放上来,希望路过的大神可以指点一下,在下感激不尽!!!

代码块:

import java.util.Scanner;
public class OutputErJinZhiBiaoShi {
 public static void main(String[] args){
  Scanner sc = new Scanner(System.in);
    
  //接收用户输入的数
  int n = sc.nextInt();
  //如果该数字大于等于0,则直接求除对应的二进制数
  if(n >= 0){
   String str = "";
   while(n>0){
    int temp = n % 2;
    
    str = temp + str;
    n /= 2;
   }
      //System.out.println(str);
   
   while(str.length() < 8){
    str = "0" + str;
   }
      System.out.println(str);
   //如果用户输入一个负数
  }else{
   //把负数转化为正数
   n = -n;
      
   //定义一个字符串用户接收这个正数的二进制数
   String str = "";
   while(n>0){
    int temp = n % 2;
    str = temp + str;
    n /= 2;
   }
      
   //补0,直到该二进制数为8位
   while(str.length() < 8){
    str = "0" + str;
   }
   System.out.println("该数字的正数形式:"+str);
      
   
   //定义一个数组,将上面的二进制数逐一判断
   //把0转化为1,把1转化为0(原码变反码)
   char[]arr1 = str.toCharArray();
   String s1 = "";
   for(int i = 0; i < str.length(); i++){
    if(arr1[i] == 48){  //'48' = 0
     arr1[i] = '1';
     s1 += arr1[i];
    }else if(arr1[i] == 49){//'49' = 1
     arr1[i] = '0';
     s1 += arr1[i];
    }
   }
      System.out.println("该数字的反码形式:"+s1);
   
   
   //把上面数字的反码形式拆开
   //对反码进行加一处理,(反码变补码)
   //如果1+1,则等于0(逢二进一);如果0+1,则等于1
   char[]arr2 = s1.toCharArray();
   int j = 7;
   //定义一个for循环,对字符串s1(反码)从最后一位进行判断
   for(int i = str.length()-1; i >= 0 ; i--){
       //如果最后一位等于1,则进一
    if(arr2[i] == 49){
     j--;
     arr2[i] = '0';
     s1 = s1.replace(arr1[i], arr2[i]);
     continue;
    }
    
    System.out.println("arr2[7]:"+arr2[j]);
    System.out.println("j:"+j);
        //如果最后一位等于0,则把0转化为1,直接输出
    if(arr2[j] == 48){
     arr2[j] = '1';
     System.out.println("arr2[j]:"+arr2[j]+"  arr1[j]:"+arr1[j]);
     s1 = s1.replace(arr1[j], '1');
     System.out.println(s1+"!");
     break;
    }
   }
   
   System.out.println("该数字的二进制:"+s1+"!!!");
   }
   }
   }

以上就是个人写的代码,里面包括了原码转反码转补码的小知识,个人感觉下面的链接里讲的不错,所以双手奉上(负数的二进制、原码、反码、补码)
有兴趣的可以看看

最后,个人的总结,虽然没有用自己的代码敲出来,但是理解了什么是原码、反码以及补码的一些问题,没有赚,但是绝对不亏!!!

相关标签: 算法提高