剑指offer:矩形覆盖&二进制中1的个数&数值的整数次方

10.矩形覆盖

/**************************************************************/
/* 题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? */
/**************************************************************/

class Solution {
public:
    int rectCover(int number) {
        int res = 0;
        if(number < 1)
            return 0;
        if(number == 1)
            return 1;
        if(number == 2)
            return 2;
        return rectCover(number-1)+rectCover(number-2);
    }
};

11.二进制中1的个数

/**************************************************************/
/* 题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 */
/**************************************************************/

#include <iostream>
using namespace std;

int  NumberOf1(int n) {
    int res = 0;
    //n&(n-1)就是把n的最末位的1置为0,while循环执行了多少次,就是原来n中1的个数
    while (n != 0)
    {
        n = n & (n - 1);
        res++;
    }
    return res;
}
int main()
{
    int n = 214748367;
    int i = NumberOf1(n);
    cout << i << endl;
    system("pause");
    return 0;
}

12.数值的整数次方

/**************************************************************/
/* 题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方 */
/**************************************************************/

#include <iostream>
using namespace std;

double Power(double base, int exponent) {
    double res = 1.0;
    if (exponent == 0)
        return 1.0;
    if (exponent > 0)
    {
        for (int i = 0; i < exponent; i++)
        {
            res = res * base;
        }
    }
    else
    {
        for (int i = 0; i < -exponent; i++)
        {
            res = res * base;
        }
        res = 1 / res;
    }

    return res;
}
int main()
{
    int n = 2,m = 3;
    cout << Power(2, 3) << endl;
    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/foreverdongjian/article/details/82189838