zoukankan      html  css  js  c++  java
  • [LeetCode]Pow(x, n)

    题目:Pow(x, n)

    类似的还有要求自己实现pow(x,n)函数,同样用到左移。

    思路如下:

    1.首先记录n的正负,

    2.然后用32位数组记录|n|的二进制表示方法,对应位置置1,表示最后计算平方的时候,当前位的结果要加到最终结果里面。

    实际上不需要用数组存储,用按位与也可以一一取出对应的1.

    3.计算32位中每位的x的乘方。并根据n的正负性给出结果。

    数学表示:x^13 = x^8 * x^4 * x^1;

    第二步即是求8、4、1,第三步求最后的乘积。

    注意:

    1.首先,特殊情况要单独考虑:x = 0.0;n=0。

    2.由于n需要变成正数,所以要考虑n=-2147483648不能直接加负号转成正数的特殊情况。

    3.最后要把n的符号加进去

     1 /************************************
     2 Implement pow(x, n).
     3 ************************************/
     4 #include<stdio.h>
     5 
     6 double myPow(double x, int n) {
     7     if(x == 0.0)return x;
     8     if(n == 0)return 1.0;
     9     //flag标记n的正负性,end表示indexs中最高位的1的下标
    10     int i,flag = 0,end = -1;
    11     int val = n;
    12     int indexs[32] = {0};//标记n的二进制表示法
    13     if(n == -2147483648){
    14         indexs[31] = 1;
    15         end = 31;
    16         flag = 1;
    17     }
    18     else{
    19         if(n < 0){
    20             flag = 1;
    21             val = -val;
    22         }
    23         for(i = 30;i >= 0;i--){
    24             int temp = 1;
    25             temp = temp << i;
    26             if(val >= temp){
    27                 val -= temp;
    28                 indexs[i] = 1;
    29                 if(end == -1)end = i;//end记录最高位
    30             }
    31         }
    32     }
    33     double result = 1.0;
    34     double temps[32] = {0.0};
    35     temps[0] = x;
    36     if(indexs[0] == 1)result = result*temps[0];
    37     for(i = 1;i <= end;i++){
    38         temps[i] = temps[i - 1]*temps[i - 1];//求x^2^i
    39         if(indexs[i] == 1)result = result*temps[i];
    40     }
    41     if(flag == 1) return 1.0/result;
    42     return result;
    43 }
    44 
    45 void main(){
    46     printf("%lf
    ",myPow(1.0000000001,-2147483648));
    47 }
  • 相关阅读:
    python基础 列表生成式
    docker 基础
    xpath例子
    redis删除以什么开头的key
    redis 关闭持久化
    python爬虫 保存页面
    python爬虫操作cookie
    SQl函数的写法
    加料记录(大屏幕)
    ios 调试
  • 原文地址:https://www.cnblogs.com/yeqluofwupheng/p/6755610.html
Copyright © 2011-2022 走看看