2019-04-20高精,快速幂

明天校赛,今天整理一下简单的模板

/*高精加,累加x到sum*/
int sum[1000], top = 1;
void get_sum1(ll x){
    int i, t = 0;//t记进位 
    for(i = 0; x != 0 || t != 0; i++){
        sum[i] += x % 10 + t;
        t = sum[i] / 10;
        sum[i] %= 10;
        x /= 10;
    }
    top = max(top, i);//最高位的位置,开区间 
}
void print(){//个位在sum[0] 
    for(int i = top - 1; i >= 0; i--) cout << sum[i];
    cout << endl;
}

/*高精乘,c = a * b,忽略正负号*/
int a[1000], b[1000], c[1000];
void mul(int *a, int *b){ 
    for(int i = 1; i <= lena; i++){
        int t = 0;//t记进位 
        for(int j = 1; j <= lenb; j++){
            c[i + j - 1] = c[i + j - 1] + t + a[i] * b[j];
            t = c[i + j - 1] / 10;
            c[i + j - 1] %= 10;
        }
        c[i + lenb] = t;
    } 
} 
void print(){//个位在c[1] 
    for(int i = lenc; i >= 1; i--) cout << c[i];
    cout << endl; 
}

/*快速幂, a的b次方*/ 
ll poww(int a, int b) {
    ll ans = 1, base = a;
    while (b != 0) {
        if (b & 1 != 0) ans *= base;
        base *= base;
        b >>= 1;
        //ans %= Mod, base %= Mod;
    }
    return ans;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值