判断一个数字的长度
长度:首先应该想到 数组,因为我们知道数组是有长度这个概念的。
首推 java Integer 和 Long 中的两个方法,他们使用不同的思路
- Integer:
final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,
99999999, 999999999, Integer.MAX_VALUE };
// Requires positive x
static int stringSize(int x) {
for (int i=0; ; i++)
if (x <= sizeTable[i])
return i+1;
}
直接使用数字与 sizeTable 中数字比较。将数组下标作为长度相对应。
- Long
static int stringSize(long x) {
long p = 10;
for (int i=1; i<19; i++) {
if (x < p)
return i;
p = 10*p;
}
return 19;
}
之前是与 9 进行比较,现在是与 10 进行比较。
思考
Integer 方法是很容易就想到的。
Long 这种,我们采用枚举法模拟:
// 数字: x
if(x < 10) {
return 1;
}
if(x < 100) {
return 2;
}
if(x < 1000) {
return 3;
}
......
// 这是很有规律的,进过提取就是 Long 的那种形式。
有一个值得我学习的是:
return 19;
他始终在想发设发的提高效率。
在循环遍历中,特别是已知次数的,对于临界值要着重思考。