社区讨论

表示被STL卡常...(是我太菜了)

P1919【模板】高精度乘法 / A*B Problem 升级版参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mi6mdw5r
此快照首次捕获于
2025/11/20 07:14
4 个月前
此快照最后确认于
2025/11/20 07:14
4 个月前
查看原帖
要手写max()
CPP
#include<cstdio>
#include<cstring>
inline int max(int a,int b) {
    return a>b?a:b;
}
char str[60010];
struct BigInt {
    static const int M=100005,P=100000000;
    long long num[M],len;
    BigInt() {
        memset(num,0,sizeof num);
        len=0;
    }
    inline void read() {
        scanf("%s",&str);
        len=0;
        int sz=strlen(str);
        for(register int i=sz-1; i>=0; i-=8) {
            num[len]=0;
            for(register int j=max(0,i-7); j<=i; j++) {
                num[len]=(num[len]<<3)+(num[len]<<1)+(str[j]^48);
            }
            ++len;
        }
        while(len>1&&!num[len-1]) --len;
    }
    inline void print() {
        printf("%d",num[len-1]);
        for(register int i=len-2; i>=0; i--) {
            printf("%08lld",num[i]);
        }
        putchar('\n');
    }
    inline BigInt operator*(const BigInt& A) const {
        BigInt B;
        B.len=A.len+len-1;
        for(register int i=0; i<len; i++) {
            for(register int j=0; j<A.len; j++) {
                B.num[i+j]+=num[i]*A.num[j];
                if(B.num[i+j]>=P) {
                    B.num[i+j+1]+=B.num[i+j]/P;
                    B.num[i+j]%=P;
                }
            }
        }
        while(B.num[B.len]) ++B.len;
        return B;
    }
};
BigInt a,b;
int main() {
    int n;
    scanf("%d",&n);
    a.read(),b.read();
    a=a*b;
    a.print();
}

回复

2 条回复,欢迎继续交流。

正在加载回复...