幂运算 C++(快速幂和大数运算)

1. 快速幂

提高运算速度。传统幂时间复杂度为O(n),使用快速幂缩小为O(logn),其中n为指数。

基本思想:




base*=base 这里就是在算

int poww(int a, int b){ // return a ^ b
    int ans = 1, base = a;
    while(b != 0){
        if(b&1 != 0) ans *= base;
        base *= base;
        b>>=1;
    }
    return ans;
}

2. 大数运算


很显然直接算的话就溢出了。我们可以把结果当成字符串来处理。

输入:

34 67

输出:

4065251716212557932550840533486793017502084747731049146444657475519303778647807844035539194338024095744

#include <iostream>
#include <stdio.h>
#define MAX 1000000
using namespace std;

int nbit;
int ans[MAX];

void init(){
    nbit = 1;
    ans[0] = 1;
}

void mul(int num){
    int temp_add = 0;
    int temp_mul = 0;
    for(int i = 0; i < nbit; i++){
        temp_mul = num * ans[i];
        ans[i] = (temp_mul + temp_add) % 10;
        temp_add = (temp_mul + temp_add) / 10;
    }
    while(temp_add){
        ans[nbit++] = temp_add % 10;
        temp_add /= 10;
    }
}

void exp(int b, int e){
    for(int i = 0; i < e; i++) mul(b);
}

void vout(){
    for(int i = nbit - 1; i >= 0; i--) printf("%d", ans[i]);
    printf("\n");
}

int main(){
    int b, e;
    while(~scanf("%d %d", &b, &e)){
        init();
        exp(b, e);
        vout();
    }
    return 0;
}

没有更多推荐了,返回首页