求一个int型数有多少位,看看你们是怎么写的?

解决方案 »

  1.   

    int num = 300283828;
    int sum =0;
    while(num!=0){
    num /= 10;
    sum++;
    }
    System.out.println(sum);
      

  2.   

    求不出来的。内存对 Java 来说是透明的,Java 没必要关心这个。
      

  3.   

    int num = 25623423;
    String s = num+"";
    System.out.println(s.length());
      

  4.   

    上面没考虑负数的情况 应该是这样
    int num = -256234234;
    String s = num <0?num*-1+"":num+"";
    System.out.println(s.length());
      

  5.   

    num.toString().replace("-","").length()
      

  6.   

    这个 效率不错 那个 步进也还可以,应为 int最大才20亿,用不了几次 while循环的
      

  7.   

    调用那些string的方法还不如用步进的方法呢
    string 严重影响效率
      

  8.   


    public class IntLenght { public static void main(String[] args) {
    System.out.println(Integer.SIZE);
    }
    }输出:
    32不知道这样是不是可以?
      

  9.   


    呵呵  api 自带的一般都不错顶一个
      

  10.   


    这个不一定,我用junit测试了一下 转string效率不差的但上面有用replace的效率就低了!
      

  11.   

    但是有BUG,int num = 0; ==> sum = 0;
        int num = -1111;
        int sum = 0;
        do {
          num /= 10;
          sum++;
        } while (num != 0);
        System.out.println(sum);
      

  12.   

    我也来一个               
     int num = 980283828;
    int test =32 - Integer.numberOfLeadingZeros(num); 
    int j;
    for(j = 0;j < 10; j++){
    if(test < 3 * (j + 1)+1 )
    if(num<(int)Math.pow(10,j)){
    System.out.println(j );break;
    }else{
    System.out.println(j+1);break;
    }
    }
    System.out.println("over");
      

  13.   

    不用除法的话,由于绝对值最大的Integer.MIN_VALUE = - 2^32 = 2147483647共10位,可以用数组  private static int[] TENS = new int[] {
          0, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000
      };  static int len(int x) {
        if (x == Integer.MIN_VALUE) {
          // Integer.MIN_VALUE 由于补码的限制,这个32bit数的绝对值等于自己,所以特殊处理
          return 10;
        }
        x = x < 0 ? -x : x;
        for (int i = 1; i < TENS.length - 1; i++) {
          if (x < TENS[i]) {
            return i;
          }
        }
        return TENS.length;
      }
      

  14.   

    更正Integer.MIN_VALUE = - 2^32 = -2147483648
      

  15.   

    谢谢楼上各位兄弟的支持,我觉的下面这代码效率比用除法高,跟大家学习下。public class Test {
    final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,
            99999999, 999999999, Integer.MAX_VALUE };
    static int stringSize(int x) {
            for (int i=0; ; i++)
                if (x <= sizeTable[i])
                    return i+1;
        } /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
     System.out.print(stringSize(2));
    }
    }
      

  16.   


    但是这样占用了额外的空间。而且算法复杂与除法是一致的,平均需要 5 次循环。对于现代 CPU 来说,有原生的除法指令,而且在 JVM 中 int 是经过特别优化过的。对于数组的索引查找与除法,还是除法更快。索引查找的话,需要根据索引点以及数据空间占用计算出数组元素的内存偏移值,再加上这个数组的首地址才能定位。
      

  17.   


    This method is great.Who invent it?
      

  18.   

    String intStr = intNum + "";
    //该整数的位数为 
    System.out.println("位数 = " + intStr.length());
      

  19.   

    This method is great.Who invent it?