目前知识有限,就现在看,做题经常用两种吧,一个是快速幂,因为a的b次幂很大,可能会爆,就需要把b分成许多个小数,比如10的32次幂,就可以写成10的平方的平方的平方的平方的平方,用while循环就可以实现了,就不怕这个大数存不下了

另一个就是数学上的两边往中间取的,这个很常见,比如在0到100间取值,想找32,就可以用0和100的中间数50当作另一边了,就是在0到50就行了,在25到50,依次就行了,缩小范围,减少时间。

以后我还会再补充。

快速幂

int fun(int a,int b)

{

  int ans=1;

  while(b)

  {

      if(b&1)//把b换成二进制,最后一位数字是1

      ans=(ans*a)%mod;

      a=(a*a)%mod;

      b>>=1;//右移一位

  }

  return ans;

}

二分就容易了,定义两个端点,让中间值=两端点和的一半,mid>值,右端点换成mid,或mid-1,因题而异

不执行的话就返回0或-1.

 

posted on 2018-04-15 22:05  喃喃小羽住  阅读(80)  评论(0)    收藏  举报