社区
数据结构与算法
帖子详情
求2的n次方首位数的问题?
yan198
2009-09-20 01:21:37
如题~
...全文
1365
70
打赏
收藏
求2的n次方首位数的问题?
如题~
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
70 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
helihui123
2010-02-21
打赏
举报
回复
31楼的觉得有道理 +eps 精度就行了
xiaohu9711
2009-10-04
打赏
举报
回复
哈哈,楼上的回答正确哦
FancyMouse
2009-10-04
打赏
举报
回复
>第一要求就是准确, 如果用上面的取log的方法,在n很大的时候,是很难真正的准确的。
要使得n!的前3位是999,n已经要非常大了。所以在正常应用范围里取log没问题
zeroieme
2009-10-04
打赏
举报
回复
[Quote=引用 63 楼 zeroieme 的回复:]
前三项分别是 1000^m、m*1000^(m-1)*24、m(m-1)/2 *1000^(m-2)*24^2
同时除以1000^m,分别是 1、24*m/1000、576*(m(m-1)/2)/(1000^2)
相加求和为
1+0.023424*m+0.000576*m^2
[/Quote]
原多项式展开时少算个m(m-1)
/2
更正为 1+0.023712*m+0.000288*m^2
zhaigates
2009-10-03
打赏
举报
回复
不错
zeroieme
2009-10-03
打赏
举报
回复
[Quote=引用 59 楼 pioneer604 的回复:]
兄弟,思路不错,不过你的前三项之和很容易超出数据类型表示范围,这题不如对数方法实用,画个杨辉三角不如直接按二项式展开来得快,如果前三项中能够根据M的大小忽略部分1000的幂,只取前三项的有效数字相加,如果这种方法行得通,我觉得是一个好办法
引用 57 楼 zeroieme 的回复:
设n/10=m余数k
2^n
=2^(10*m+k)
=(2^10)^m*(2^k)
=1024^m*(2^k)
=(1000+24)^m * (2^k)
后者1、2、4、8、16、……512
前面用《杨辉三角》展开, 取前3项之和与(2^k)相乘。
[/Quote]
杨辉三角当然是用二项式系数公式。凑个1024、取展开式前3项之和当然为了简化1000的乘幂后面的N个零。
就是这个意思,你都补充完了
pioneer604
2009-10-03
打赏
举报
回复
哦,明白了
[Quote=引用 63 楼 zeroieme 的回复:]
前三项分别是 1000^m、m*1000^(m-1)*24、m(m-1)/2 *1000^(m-2)*24^2
同时除以1000^m,分别是 1、24*m/1000、576*(m(m-1)/2)/(1000^2)
相加求和为 1+0.023424*m+0.000576*m^2
总结为
设 n/10=m余数k
则2^n 的首位数与(1+0.023424*m+0.000576*m^2)* 2^k 相同
取前三项是因为乘数(2^k) 部分可能有三位有效数字,所以(2^10)^m也保证三位有效数字的精度。
[/Quote]
zeroieme
2009-10-03
打赏
举报
回复
更正为
则2^n 的首位数与(1+0.023424*m+0.000576*m^2)* 2^k
的首位数
相同
zeroieme
2009-10-03
打赏
举报
回复
前三项分别是 1000^m、m*1000^(m-1)*24、m(m-1)/2 *1000^(m-2)*24^2
同时除以1000^m,分别是 1、24*m/1000、576*(m(m-1)/2)/(1000^2)
相加求和为 1+0.023424*m+0.000576*m^2
总结为
设 n/10=m余数k
则2^n 的首位数与(1+0.023424*m+0.000576*m^2)* 2^k 相同
取前三项是因为乘数(2^k) 部分可能有三位有效数字,所以(2^10)^m也保证三位有效数字的精度。
pioneer604
2009-10-03
打赏
举报
回复
只是光取前三项的话数值仍然太大,我的意思能不能进一化简化
[Quote=引用 60 楼 zeroieme 的回复:]
引用 59 楼 pioneer604 的回复:
兄弟,思路不错,不过你的前三项之和很容易超出数据类型表示范围,这题不如对数方法实用,画个杨辉三角不如直接按二项式展开来得快,如果前三项中能够根据M的大小忽略部分1000的幂,只取前三项的有效数字相加,如果这种方法行得通,我觉得是一个好办法
引用 57 楼 zeroieme 的回复:
设n/10=m余数k
2^n
=2^(10*m+k)
=(2^10)^m*(2^k)
=1024^m*(2^k)
=(1000+24)^m * (2^k)
后者1、2、4、8、16、……512
前面用《杨辉三角》展开, 取前3项之和与(2^k)相乘。
杨辉三角当然是用二项式系数公式。凑个1024、取展开式前3项之和当然为了简化1000的乘幂后面的N个零。
就是这个意思,你都补充完了
[/Quote]
pioneer604
2009-10-02
打赏
举报
回复
兄弟,思路不错,不过你的前三项之和很容易超出数据类型表示范围,这题不如对数方法实用,画个杨辉三角不如直接按二项式展开来得快,如果前三项中能够根据M的大小忽略部分1000的幂,只取前三项的有效数字相加,如果这种方法行得通,我觉得是一个好办法
[Quote=引用 57 楼 zeroieme 的回复:]
设n/10=m余数k
2^n
=2^(10*m+k)
=(2^10)^m*(2^k)
=1024^m*(2^k)
=(1000+24)^m * (2^k)
后者1、2、4、8、16、……512
前面用《杨辉三角》展开, 取前3项之和与(2^k)相乘。
[/Quote]
Freedom
2009-10-02
打赏
举报
回复
为什么要着样做啊 挺麻烦的啊,我觉得先求出2的n次方等于多少,在用它对10取整就是了 比如
128对10取整,只要取整后的数不等于0就是了 循环判断条件
while(n!=0)
zeroieme
2009-10-02
打赏
举报
回复
设n/10=m余数k
2^n
=2^(10*m+k)
=(2^10)^m*(2^k)
=1024^m*(2^k)
=(1000+24)^m * (2^k)
后者1、2、4、8、16、……512
前面用《杨辉三角》展开, 取前3项之和与(2^k)相乘。
liusujian02
2009-10-02
打赏
举报
回复
学习!
pioneer604
2009-10-01
打赏
举报
回复
大兄弟,这么高明的公式真悟不出来,还是指点一下吧
[Quote=引用 54 楼 yangfan227 的回复:]
这个题有公式的,就是O(1)算法了。
提示,先将2^n的10进制表达式写出来,然后楼主在研究研究,值得你去研究的。
[/Quote]
yangfan227
2009-10-01
打赏
举报
回复
这个题有公式的,就是O(1)算法了。
提示,先将2^n的10进制表达式写出来,然后楼主在研究研究,值得你去研究的。
twilightgod
2009-09-29
打赏
举报
回复
ls这个问题就是原问题.....
对于n比较小用暴力
大一点的话用对数精度应该ok
p.s. 当时这题是打表过去的
kfanffvga
2009-09-29
打赏
举报
回复
这个问题可否考虑下10进制和2进制的数的转换问题,因为在2进制中,2^n是1后面跟着n个0,我们只要想清楚怎么把前面几位数转换成10进制就可以了
unierror
2009-09-28
打赏
举报
回复
这个控制下范围,每算一次都除10取整一下
linren
2009-09-25
打赏
举报
回复
[Quote=引用 48 楼 hztlfwd 的回复:]
【运行结果】
Assembly code2^1-->22^2-->42^3-->82^4-->22^5-->32^6-->62^7-->12^8-->32^9-->52^10-->1
Press any key to continue
[/Quote]
2^4-->2也不对啊
[/Quote]
嗯……
正确的程序是在31楼……
加载更多回复(49)
python计算2的n
次方
_python
求
n
次方
除了c里的加减乘除取余外,python还引入了取整除()和取
次方
(**)两种操作,分别是返回商的整
数
部分(但不一定是整型
数
)和
求
n
次方
的结果? 变量 1.python的变量不需要显式写出类型,可以直接进行变量的定义,在...
2的N
次方
首位
数
log(2^n) = n*log2 【思路】 假如知道2^n有多少位 比如说是x位 然后
求
[(2^n)/(10^(x-1))] ① 得到的结果就是第一个
数
了(“[]”表示取整) 例如: 2^5=32 n=5 x=2 [(2^n)/(10^(x-1))]=[32/10]=[3.2]=3
求
位
数
可以...
2的n
次方
表格
0
次方
:1 1
次方
:2 2
次方
:4 3
次方
:8 4
次方
:16 5
次方
:32 6
次方
:64 7
次方
:128 8
次方
:256 9
次方
:512 10
次方
:1024 11
次方
:2048 12
次方
:4096 13
次方
:8192 14
次方
:16384 15
次方
:32768 16
次方
:65536 17
次方
...
XYNUOJ N的N
次方
N的N
次方
时间限制: 1 Sec 内存限制: 32 MB[提交][状态][讨论版]题目描述现给你一个正整
数
N,请问N^N的最左边的
数
字是什么?输入输入包含多组测试
数
据。每组输入一个正整
数
N(N<=1000000)。输出对于每组...
怎么用c语言编写2的n
次方
,2的n
次方
用C语言怎么编写程序
#include double f(double x,int n); main() { double x; int n; printf("please input x & n:"); scanf("%lf,%d",&x,&n); if(x==0) { if(n>0) printf("\n\n0....已知2×8的n
次方
×16的n
次方
=2的...
数据结构与算法
33,028
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章