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;
}