菜鸟求一个算法,我想求出15是2的几次幂,我想得出这样的结果,15=2的3次幂还余7,能得到吗???(50分)

  • 主题发起人 主题发起人 wanglong
  • 开始时间 开始时间
W

wanglong

Unregistered / Unconfirmed
GUEST, unregistred user!
菜鸟求一个算法,我想求出15是2的几次幂,我想得出这样的结果,15=2的3次幂还余7,能得到吗??
 
这位大哥,不知道能不能用取对数的方法来操作呢?
log2(15)=3.9,介于3和4之间,然后取整为3,之后余数可由15-2^3=7易得
 
小弟也是刚学delphi,有机会多交流,我的hotmail地址是huzhicheng001@hotmail.com
 
procedure GetCalcMi(const iDashu:integer;const iXiaoshu:integer;var iMi:integer;var iYushu:Integer)
begin
iMi:=floor(Log2(iDashu)/log2(iXiaoshu));
iYushu:=iDashu-Floor(Power(iXiaoshu,iMi));
end;
 
target=15;
i=1;
source=2;
now=source;
while now<target do begin
now*=source;
i++;
end;
if now=target then print(i次幂) else print(i-1次幂之后余target-now/source)
 
其实借用的是这个定理:
如果a^b=c
则log2(a^b)=log2(c)->
b*log2(a)=log2(c)->
b=log2(c)/log2(a)
 
最笨的方法:
var
num, temp: Integer;
mi, remain: Integer;
begin
mi := 1;
num := 15;
temp := 2;
while num >= temp do
begin
temp := temp * 2;
Inc(mi);
end;
Dec(mi);
remain := num - temp div 2;
ShowMessage(IntToStr(num) + '=2的'+ IntToStr(mi)+'次幂余' + IntToStr(remain));
end;
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部