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
32097
回复
删除
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不可以........