当前位置:  开发笔记 > 开发工具 > 正文

如何在没有字符串强制转换的情况下计算整数中的数字?

如何解决《如何在没有字符串强制转换的情况下计算整数中的数字?》经验,为你挑选了3个好方法。

我担心这个问题有一个简单明了的答案.我需要确定项目数量的宽度是多少,这样我就可以使用维持对齐所需的最小前导零数来填充每个项目编号.例如,如果总数<10则不想要前导零,如果它在10到99之间,则不需要1,等等.

一种解决方案是将项目计数转换为字符串,然后计算字符数.呸!有没有更好的办法?

编辑:我不会想到使用常见的对数(我不知道存在这样的事情).所以,对我来说并不明显 - 但绝对简单.



1> Nicholas Man..:

这应该这样做:

int length = (number ==0) ? 1 : (int)Math.log10(number) + 1;


所以也许只是简单地调用n.toString().length()或n.abs().toString().length()毕竟不是一个坏主意.当然,没有数学背景的人会更容易理解.

2> Ryan Emerle..:
int length = (int)Math.Log10(Math.Abs(number)) + 1;

您可能需要考虑负号..



3> jheriko..:

如果带有乘法的语句,则会重复比重复除法更有效的解决方案...例如(其中n是需要数字位数的数字)

unsigned int test = 1;
unsigned int digits = 0;
while (n >= test)
{
  ++digits;
  test *= 10;
}

如果项目计数有一些合理的上限(例如无符号整数的32位范围),那么更好的方法是与某些静态数组的成员进行比较,例如

// this covers the whole range of 32-bit unsigned values
const unsigned int test[] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 };

unsigned int digits = 10;
while(n < test[digits]) --digits;

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有