讨论 / 求教怎么想到用二进制来做的?
BEWINDOWEB 2011-11-04 04:24:00
点我顶贴 收藏 删除
我最开始用模拟..然后把自己搅晕了...然后看到用二进制做,纸上测试了下,是对的,于是瞬间写完...然后AC..

但是大牛们是怎么想到用它的?求教入题思路啊?

program matrix;

var i,j,n,k,sum:longint;

a:array[0..100000] of longint;

procedure change(n:longint);

begin

i:=-1;

repeat

inc(i);

a[i]:=n mod 2;

n:=n div 2;

until n=0;

end;

BEGIN

readln(k,n);

change(n);

sum:=0;

for j:=0 to i do

sum:=sum+a[j]*round(exp(j*ln(k)));

writeln(sum);

END.

#1 pk572820634@2013-11-06 02:53:54
回复 删除
var

k,n:longint;

ans,num:longint;

begin

readln(k,n);

num:=1;

while n>0 do

begin

ans:=ans+num*(n mod 2);

n:=n div 2;

num:=num*k;

end;

writeln(ans);

end.

最短FP题解~还是自己想的~虽然我不是大犇~

其实很简单:k^n>0(n∈N);

题目的意思就是第k项的存在与不存在的组合(0:不存在;1:存在);

题目的意思:3的:0次幂1,1次幂1,0次幂、1次幂1,2次幂1……

翻译成二进制就是:1↑, ↑10, ↑11, ↑100, 101,110,111,1000……

就是这样~n也可以翻译成为2进制数,以各次幂存在于不存在求和,输出就是了~

另:第九个点必须为longint才能过,int64不可以........

查看更多回复
提交回复