import java.util.Scanner;   
/**  
 * 将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。<br>  
 * <br>  
 * 这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,<br>  
 * 还是其中包含有非数字字符的情况。<br>  
 * 提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,<br>  
 * 接着再用得到的商作为被除数去除以2,这次得到的余数就是次低位,如此循环,直到被除数为0为止。<br>  
 * 其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),<br>  
 * 就很容易理解十进制数转二进制数的这种方式。  
 *   
 * @author 享受JAVA(java2000.net)  
 */  
public class T3 {   
  /**  
   * @param args  
   */  
  public static void main(String[] args) {   
    Scanner in = new Scanner(System.in);   
    String str = in.nextLine();   
    int num = 0;   
    try {   
      num = strToInt(str);   
    } catch (NumberFormatException ex) {   
      System.out.println(ex.getMessage());   
      return;   
    }   
    System.out.println("num=" + num);   
    System.out.println("二进制为:" + toBinaryString(num));   
  }   
  public static String toBinaryString(int num) {   
    StringBuilder b = new StringBuilder();   
    try {   
      while (num > 0) {   
        b.insert(0, num % 2);   
        num >>>= 1;   
      }   
      return b.toString();   
    } finally {   
      b.delete(0, b.length());   
      b = null;   
    }   
  }   
  public static int strToInt(String s) {   
    int result = 0;   
    boolean negative = false;   
    int i = 0, max = s.length();   
    int limit;   
    int multmin;   
    int digit;   
    if (max > 0) {   
      if (s.charAt(0) == '-') {   
        negative = true;   
        limit = Integer.MIN_VALUE;   
        i++;   
      } else {   
        limit = -Integer.MAX_VALUE;   
      }   
      multmin = limit / 10;   
      if (i < max) {   
        digit = Character.digit(s.charAt(i++), 10);   
        if (digit < 0) {   
          throw new NumberFormatException("字符串格式不正确: \"" + s + "\"");   
        } else {   
          result = -digit;   
        }   
      }   
      while (i < max) {   
        // Accumulating negatively avoids surprises near MAX_VALUE   
        digit = Character.digit(s.charAt(i++), 10);   
        if (digit < 0) {   
          throw new NumberFormatException("字符串格式不正确: \"" + s + "\"");   
        }   
        if (result < multmin) {   
          throw new NumberFormatException("数字超过最大允许范围:: \"" + s + "\"");   
        }   
        result *= 10;   
        if (result < limit + digit) {   
          throw new NumberFormatException("数字超过最大允许范围: \"" + s + "\"");   
        }   
        result -= digit;   
      }   
    } else {   
      throw new NumberFormatException("字符串为空: \"" + s + "\"");   
    }   
    if (negative) {   
      if (i > 1) {   
        return result;   
      } else { /* Only got "-" */  
        throw new NumberFormatException("不能只有负号: \"" + s + "\"");   
      }   
    } else {   
      return -result;   
    }   
  }   
}  
   注解
   
   StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
  
 
版权声明:本文为hjjk888原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
