#4133: 求第二个点 WA。。。


cfjhzcb (cfjhzcb)

學校 : Harvard University
編號 : 9545
來源 : [122.96.58.35]
最後登入時間 :
2010-11-12 19:09:19
d493. 入门求幂题(求幂系列题1) -- scientific | From: [122.96.58.35] | 發表日期 : 2010-08-20 22:26

是不是什么特殊数据? 怎么每次都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.

 
#4134: Re:求第二个点 WA。。。


cfjhzcb (cfjhzcb)

學校 : Harvard University
編號 : 9545
來源 : [122.96.58.35]
最後登入時間 :
2010-11-12 19:09:19
d493. 入门求幂题(求幂系列题1) -- scientific | From: [122.96.58.35] | 發表日期 : 2010-08-20 23:01

是不是什么特殊数据? 怎么每次都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.

 

哎 这数据。。。

 
ZeroJudge Forum