0


使用移位计算平方

原文链接: 使用移位计算平方

上一篇: atom Windows10 安装 配置c++环境

下一篇: 二分查找

重复使用加法的复杂度是O(n)。我们使用位运算符可以在O(Logn)的时间内完成。

一个数的平方可以转化为 如下的递归格式

  1. square(6) = 4*square(3)
  2. square(3) = 4*(square(1)) + 4*1 + 1 = 9
  3. square(7) = 4*square(3) + 4*3 + 1 = 4*9 + 4*3 + 1 = 49
  1. 如果n是偶数,可以写作:
  2. n = 2*x
  3. n2 = (2*x)2 = 4*x2
  4. 如果n是奇数,可以写作:
  5. n = 2*x + 1
  6. n2 = (2*x + 1)2 = 4*x2 + 4*x + 1
  7. floor(n/2) 可以通过右移运算实现. 2*x and 4*x 可以通过左移运算实现。

c++

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <string>
  5. using namespace std;
  6. // 返回 n^2
  7. int square(int n){
  8. if (n < 0)
  9. n = -n;
  10. if (n == 0)
  11. return 0;
  12. int x = n >> 1;
  13. return (n & 1) ?
  14. ( (square(x) << 2) + (x << 2) + 1) : //奇数
  15. (square(x) << 2);//偶数
  16. }
  17. int main(){
  18. for (int i = -10; i < 10; i++){
  19. printf("%4d %4d\n", i, square(i) );
  20. }
  21. return 0;
  22. }

134138_zUVs_2856757.png

标签: c++ 算法 docker

本文转载自: https://blog.csdn.net/qq_35516360/article/details/122066951
版权归原作者 阿豪boy 所有, 如有侵权,请联系我们删除。

“使用移位计算平方”的评论:

还没有评论