是不是什么特殊数据? 怎么每次都WA?
var
a,n:int64;
function f(a,n:int64):int64;
var
t:int64;
begin
if a=0 then exit(0);
if a=1 then exit(1);
if a=-1 then if n mod 2=1 then exit(-1) else exit(1);
if n=1 then exit(a);
if n=0 then exit(1);
t:=f(a,n div 2);
f:=t*t;
if n mod 2=1 then f:=f*a;
end;
begin
readln(a,n);
writeln(f(a,n));
end.
是不是什么特殊数据? 怎么每次都WA?
var
a,n:int64;
function f(a,n:int64):int64;
var
t:int64;
begin
if a=0 then exit(0);
if a=1 then exit(1);
if a=-1 then if n mod 2=1 then exit(-1) else exit(1);
if n=1 then exit(a);
if n=0 then exit(1);
t:=f(a,n div 2);
f:=t*t;
if n mod 2=1 then f:=f*a;
end;
begin
readln(a,n);
writeln(f(a,n));
end.
经过无数次的实验 终于知道了:
有n<0的情况 但是a都为-1(第二和第四个点)
判断奇数偶数 用mod要判断1或-1 因为是负数
所以用odd函数判断就好了。。。
其实
var
a,n:int64;
function f(a,n:int64):int64;
var
t:int64;
begin
if a=0 then exit(0);
if a=1 then exit(1);
if a=-1 then if n mod 2=1 then exit(-1) else exit(1); ==》这行改一下就行 变为 if a=-1 then if n mod 2=0 then exit(1) else exit(-1);
if n=1 then exit(a);
if n=0 then exit(1);
t:=f(a,n div 2);
f:=t*t;
if n mod 2=1 then f:=f*a;
end;
begin
readln(a,n);
writeln(f(a,n));
end.
哎 这数据。。。