怎么样知道一个数是几位数

troubleboy 2005-08-23 08:11:46
在程序中经过某些运算,得到一个数,但是不知道这个数是几位的,用什么办法能算出这个数的位数。谢谢。
...全文
779 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxw 2005-09-26
  • 打赏
  • 举报
回复
(x+'').length
andy_linky 2005-09-26
  • 打赏
  • 举报
回复
对数
yangyzqo 2005-09-23
  • 打赏
  • 举报
回复
学习
xdop 2005-09-20
  • 打赏
  • 举报
回复
最快是比较法,但是有限
大数用对数
liangbch 2005-09-20
  • 打赏
  • 举报
回复
楼上的方法大概是速度最慢的方法之一,你看一看sprinf,strlen的源代码,就知道了。
gnefuil 2005-09-19
  • 打赏
  • 举报
回复
sprintf(str,"%d",a);
printf("%d",strlen(str));
fishbob21 2005-09-19
  • 打赏
  • 举报
回复
public class DigitalSize {
public int size(int d) {
int[] sizeTable = {9, 99, 999, 9999, 99999, 999999,
9999999, 99999999, 999999999, Integer.MAX_VALUE};
if (d < 0) {
d = -d;
}
for (int i = 0; ; i++) {
if (d <= sizeTable[i]) {
return i + 1;
}
}
}

public static void main(String[] args) {
DigitalSize digitalsize = new DigitalSize();
System.out.println(digitalsize.size( -123456));
}
}

主要算法参考的Integer类中的stringSize方法
liangbch 2005-09-01
  • 打赏
  • 举报
回复
你们怎么不看我的回复吧,对整数而言,使用优化的二分比较法的速度仍不如我下面给出的汇编代码。
_asm
{
mov eax, n
or eax,eax
jz $exit
bsr eax, eax
inc eax
$exit:
}
无心人 2005-09-01
  • 打赏
  • 举报
回复
一个对数要消耗上百个CPU时钟
还不如二分的判断来的快

估计8位数用不到对数
无心人 2005-09-01
  • 打赏
  • 举报
回复
如果数字比较大
对数法最优
小到一定程度则,用比较法

< 10 1
< 100 2
< 1000 3

类推
xiaocai0001 2005-08-24
  • 打赏
  • 举报
回复
int(log10(1000)) + 1,结果是3,可1000应该是4位数了
------------------------
log10(1000) = 3.0
int(log10(1000)) + 1 = 4

我没算错吧?
troubleboy 2005-08-24
  • 打赏
  • 举报
回复
xiaocai0001(萧筱雨): int(log10(1000)) + 1,结果是3,可1000应该是4位数了
NowCan 2005-08-24
  • 打赏
  • 举报
回复
还要考虑负数的情况。
liangbch 2005-08-23
  • 打赏
  • 举报
回复
如果求是几位10进制数,只能用下面的方法:

if (n=0)
return 0;
if ( n >=1 && n<10)
return 1;
else if (n>=10 && n<100)
return 2;
else if (n>=100 && n<1000)
... //以此类推

如果求是几位2进制数,有使用汇编指令的快速方法,下面是VC中嵌入汇编的示例程序:

int GetBitCount(unsigned long n)
{
_asm
{
mov eax, n
or eax,eax
jz $exit
bsr eax, eax
inc eax
$exit:
}
}
// 说明:定义0是0位数
int main(int argc, char* argv[])
{
unsigned long i;
for (i=0;i<=256;i++)
{
printf("%d is %d dig num\n",i,GetBitCount(i));
}
return 0;
}
xiaocai0001 2005-08-23
  • 打赏
  • 举报
回复
你这个数是不是整数啊?
整形?长整形?
如果是整数
可以用循环除10来确定位数

如果只是想知道整数部分的位数,可以用log10()这个函数
对任意整数N(N>0)log10(N)取整+1就是这个N的位数了

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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