1.求幂函数 #include pow(a,b); 计算a的b次幂

2.error: invalid types 'int[int]' for array subscript| 记住这个错误吧,犯过好多次了

数组变量名不一致或者是没定义

数组空间不够

变量名和数组名重复定义

3.快速幂

快速幂本质上是一个倍增问题,比如说

要求6的34次方

如果34个6相乘,就很复杂

但是如果这样的话

34的二进制是100010

用二进制来算,就可以大大减少计算的次数

//n为二进制的一串数
while(n!=0){
int r=1;
if(n%2==1){ //将二进制的某一位取模,如果是1的话,就说明这一位有数字1,然后就得数   
 r=r*a; 
}                              
a=a*a;     //不论n是否为1,a都继续乘a
n=n%2;     //n右移
return r;
}

 

 

#include <iostream>
using namespace std;

#define N 100


void get_(int n, int binary[]) {
    int i = 0;
    while (n > 0) {
        binary[i] = n % 2;
        n = n / 2;
        i++;
    }
    // 输出二进制表示形式
    for (int j = i - 1; j >= 0; j--) {
        cout << binary[j];
    }
}

// 计算 m 的 n 次幂
long long quickPower(int a[], int n, int m) {
    int r = 1;
    for (int i = 0; i < n; i++) {  //这个地方的n就很特殊,其实没有人确定这个二进制到底有几个数,但是它肯定不会超过n,所以就用n作为循环结束的条件
        if (a[i] % 2 == 1) {
            r = r * m;
        }
        m = m * m;
    }
    return r;
}

int main() {
    int n, m;
    // 输入 n 和 m
    cin >> n >> m;
    // 存储 n 的二进制表示形式
    int binary[N];
   get_(n, binary);
    cout << endl;

    // 计算 m 的 n 次幂
    long long  result = quickPower(binary, n, m);
    cout << "Result: " << result << endl;

    return 0;
}

 不过上面解释的也很不清晰

有一个小小的问题是,求出二进制之后,如何应用在求快速幂里面,

这里是用数组保存的,通过循环将二进制的某一位取用。

posted on 2024-05-11 16:19  fafrkvit  阅读(2)  评论(0编辑  收藏  举报