如何判断一个数字是1开头?

2013-01-14 17:19:15 +08:00
 m
例如变量值为:
1000
200
900000

我要判断1000时返回true
同样
1=true
10 = true
100=true

其他非1开头都为false

用什么算法可以判断?(除了转为string之外)
6479 次点击
所在节点    问与答
70 条回复
2lbj
2013-01-15 11:17:09 +08:00
我去不是这么复杂吧?!!
2lbj
2013-01-15 11:18:13 +08:00
这种事情果断用正则表达式啊?
xpfd
2013-01-15 11:46:09 +08:00
不断的对10取余 余数不为0 返false 然后除10 判断是不是1或者0
alexrezit
2013-01-15 11:52:44 +08:00
@m
Recursion 在逻辑上应该是更简单才对吧...
m
2013-01-15 12:05:46 +08:00
我测试了一下执行效率,测试结果如下:
regex : used:706657ns
log10 : used:23906ns
contains: used:11346ns
while : used:1216ns

可见使用正则是最慢的,整整706657ns @2lbj

我使用的测试代码如下:
//regex
boolean is10=(""+n).matches("^10*$");

//log10
boolean is10=Math.log10(n)%1==0;

//contains
boolean is10=TEN.contains(n);

//while
while(true){
n=n/10;
if(n==1){
return true;
}else if(n<10){
return false;
}
}


BTW:我最终还是使用了log10方法进行判断
chisj
2013-01-15 12:32:01 +08:00
@explon 有木有考虑大端序和小端序?哈哈!
picasso250
2013-01-15 13:23:55 +08:00
目测52楼效率最高。log10的方案目测应该比循环除还慢(毕竟循环除是整数除法,而log10应该是double的除法)。
soulteary
2013-01-15 14:21:26 +08:00
@Mutoo IEEE754标准的JS你懂的,js的话,查表应该是不错选择。
sangwei
2013-01-15 14:24:26 +08:00
给个最土的思路:
//32 位 int -2,147,483,648 ~ +2,147,483,647
if (x == 1 or x == -1) return true;
if (x == 10 or x == -10) return true;
...
if (x == 1,000,000,000 or x == -1,000,000,000) return true;
return false;
madao
2013-01-15 15:42:27 +08:00
@013231 有意思

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/57554

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX