求一个int型数有多少位

ssqtjffcu 2010-04-26 12:15:28
求一个int型数有多少位,看看你们是怎么写的?
...全文
5890 35 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
missliujun 2011-08-05
  • 打赏
  • 举报
回复
This method is great.Who invent it?
liuxiaolei7676 2010-04-26
  • 打赏
  • 举报
回复
上面没考虑负数的情况 应该是这样
int num = -256234234;
String s = num <0?num*-1+"":num+"";
System.out.println(s.length());
liuxiaolei7676 2010-04-26
  • 打赏
  • 举报
回复
int num = 25623423;
String s = num+"";
System.out.println(s.length());
捏造的信仰 2010-04-26
  • 打赏
  • 举报
回复
求不出来的。内存对 Java 来说是透明的,Java 没必要关心这个。
ssqtjffcu 2010-04-26
  • 打赏
  • 举报
回复
楼上的看能不能写个更有效率的,不用除法
liuxiaolei7676 2010-04-26
  • 打赏
  • 举报
回复
int num = 300283828;
int sum =0;
while(num!=0){
num /= 10;
sum++;
}
System.out.println(sum);
ssqtjffcu 2010-04-26
  • 打赏
  • 举报
回复
呵呵,我的意思是求多少位数,比如300是三位数,
lyn0032 2010-04-26
  • 打赏
  • 举报
回复
坐等大神展示位运算
liuxiaolei7676 2010-04-26
  • 打赏
  • 举报
回复
晕 完全误解楼主意思了!崩溃中....
liuxiaolei7676 2010-04-26
  • 打赏
  • 举报
回复 1
不是32bit么
caixueping 2010-04-26
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分
kahoho 2010-04-26
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分
princess_rosie 2010-04-26
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分
无痕叶落 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 youyouzhishen 的回复:]
Assembly code

public class IntLenght {

public static void main(String[] args) {
System.out.println(Integer.SIZE);
}
}




输出:
32

不知道这样是不是可以?
[/Quote]

没看明白LZ的意思。。。
shine333 2010-04-26
  • 打赏
  • 举报
回复
更正Integer.MIN_VALUE = - 2^32 = -2147483648
shine333 2010-04-26
  • 打赏
  • 举报
回复
不用除法的话,由于绝对值最大的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;
}
yueguangkai001 2010-04-26
  • 打赏
  • 举报
回复
这个问题也讨论这么多的方案,不管用什么方法,这点效率都算不上什么
xooxoo 2010-04-26
  • 打赏
  • 举报
回复
呵呵,能看得懂的举手~~
xooxoo 2010-04-26
  • 打赏
  • 举报
回复
我也来一个


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");


shine333 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 bao110908 的回复:]
引用 5 楼 ssqtjffcu1 的回复:

楼上的看能不能写个更有效率的,不用除法


我晕,4 楼那个是效率最高的,比其他什么转为字符串再求长度效率高出不止一个层次了
[/Quote]
但是有BUG,int num = 0; ==> sum = 0;
    int num = -1111;
int sum = 0;
do {
num /= 10;
sum++;
} while (num != 0);
System.out.println(sum);
加载更多回复(15)

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧