2019-04-20高精,快速幂

本文提供了高精度加法和乘法的实现模板,包括累加和快速幂算法,适用于解决大数运算问题。高精度加法通过逐位相加并处理进位实现,高精度乘法则通过两数每位相乘再累加的方式完成。快速幂算法用于高效计算大数的幂次方。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

/*高精加,累加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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值