各位来看看:用高中数学知识:首位为 9 的数有几个?

2016-05-11 16:36:21 +08:00
 panchina
前几天培训时提出的一个问题:
9, 9^1, 9^2, ... 9^2016

首位为 9 的数有几个?
思路是是什么?
方法如何实现?

ps:不能一个个排查
pps:说用高中数学知识就可以了 =_=!
6299 次点击
所在节点    数学
41 条回复
Dannytmp
2016-05-11 16:38:46 +08:00
难点在于高中知识的范围啊
shshilmh
2016-05-11 17:15:52 +08:00
ffffwh
2016-05-11 17:57:03 +08:00
9 * (10 - 1)^n, for n = 0 -> 2016 。看(10-1)^n 怎么给出首位为 1 的?
Kirscheis
2016-05-11 18:00:03 +08:00
这个用得着高中知识吗。。初中差不多了,考点对数换底公式啊。

10^([log(9^n)]+1) > 9^n > 9^[log(9^n)]
解不等式,得 log(9) < nlog(9)-[nlog(9)] < 1
也就是说 nlog(9) 的小数部分大于 log(9) 就可以了。列等差数列,做一个除法,问题结束。
panchina
2016-05-11 18:00:16 +08:00
@ffffwh 这不就是相当于一个个排查了么?
lightening
2016-05-11 18:15:38 +08:00
@Kirscheis 能不能解释一下为什么 10^([log(9^n)]+1) > 9^n > 9^[log(9^n)] 代表首位为 9 ?
Kirscheis
2016-05-11 18:28:50 +08:00
@lightening
p 位整数首位为 9 的充要条件是 10^p > x >= 10^(p-1),这里因为 9 的幂次个位不可能为 0 ,故条件退化为 10^p > x > 10^(p-1)
又因为任意 p 位整数 n 可化为级数 ∑(a,i) aᵢ*(10^i),故 n 的位数 p = [log(9^n)]+1
上面两个条件合起来就是了
Kirscheis
2016-05-11 18:31:20 +08:00
@lightening
手机打字变量名打错了。。漏了个条件
p 位整数 x 首位为 9 的充要条件是 10^p > x >= 10^(p-1),这里因为 9 的幂次个位不可能为 0 ,故条件退化为 10^p > x > 10^(p-1)
又因为任意 p 位整数 x 可化为级数 ∑(a,i) aᵢ*(10^i),故 n 的位数 p = [log(x)]+1 ,题设中的 x = 9^n ,故 p = [log(9^n)]+1
上面两个条件合起来就是了
Kirscheis
2016-05-11 18:32:43 +08:00
@lightening
报警,发出去发现还有一处没改。。请忽略上面两条
p 位整数 x 首位为 9 的充要条件是 10^p > x >= 10^(p-1),这里因为 9 的幂次个位不可能为 0 ,故条件退化为 10^p > x > 10^(p-1)
又因为任意 p 位整数 x 可化为级数 ∑(a,i) aᵢ*(10^i),故 x 的位数 p = [log(x)]+1 ,题设中的 x = 9^n ,故 p = [log(9^n)]+1
上面两个条件合起来就是了
luban
2016-05-11 18:37:26 +08:00
http://blog.udn.com/ivan5chess/1636470

这里有个很巧妙的解法,但是要知道最后一个,也就是 9 的 2016 次方首位是不是 9
luban
2016-05-11 18:39:20 +08:00
上面说错了,应该是要知道最大的一个 9 的 n 次方首位是 9 才行
luban
2016-05-11 18:57:24 +08:00
经过少量测试, 9^2011 的首位是 9 , 9^2011 长度是 1919 ,也就是 2011-1919=92 个
billion
2016-05-11 19:39:32 +08:00
9^1---> 1 个 9 开头
9^2--->1 个 9 开头
9^3--->11 个 9 开头,分别为:9, 90,91,92,93,94,95,96,97,98,99 ->1+10
9^4 --->111 个 9 开头->1+10+100
……
9^2016 ---> 1 + 10 +100 + 1000 + …… + 10 …… 2015 = 11111111 …… 1111 ( 2015 个 1 )个 9 开头
yuuki
2016-05-11 19:40:49 +08:00
算出来是 21 个,不知道对不对🐸
用到了科学计数法,对数和不等式的知识
9^n=a·10^(n-1),满足首位为 9→9≤a<10 ,解不等式得 1≤n≤21
qqmishi
2016-05-11 19:43:43 +08:00
想了半天才发现是要求有几个,,,
首位是 9 意味着本次运算没有进位,所以看看位数与指数的差就行了,理论上只需要算 9^2016 的位数

实际上差不多每隔 22 或者 21 就会出现一个首位是 9 的
loading
2016-05-11 19:52:31 +08:00
完全不懂……
zingl
2016-05-11 23:47:35 +08:00
2016*(1-log9)
lightening
2016-05-11 23:56:58 +08:00
@Kirscheis
谢谢。这里 [ ] 是取整数的意思吗?
jimages
2016-05-12 00:11:56 +08:00
@Kirscheis 有误,应为, p 位整数 x 首位为 9 的充要条件是 10^p > x >= 10^p - 10^(p-1)
jimages
2016-05-12 00:16:49 +08:00
@jimages 于是 变形 10^p > x >= 9*10^(p-1) 这里在 x 为 9 的时候需要取等号,因此不能退化。

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

https://www.v2ex.com/t/277944

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

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

© 2021 V2EX