社区讨论

求大佬帮忙看高精哪里写挂了

P1018[NOIP 2000 提高组] 乘积最大参与者 4已保存回复 4

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@mi6up5wx
此快照首次捕获于
2025/11/20 11:07
4 个月前
此快照最后确认于
2025/11/20 11:07
4 个月前
查看原帖
非常感谢orz
CPP
struct bigint{
    int a[200];
    bigint(){
        memset(a, 0, sizeof(a));
        a[0] = 1;
    }
    bigint(long long x){
        memset(a, 0, sizeof(a));
        int ptr = 0;
        while(x != 0){
            a[++ptr] = x % MOD;
            x /= MOD;
        }
        a[0] = ptr;
    }
    bigint operator=(const bigint& right){
        this->a[0] = right.a[0];
        for(int i = 1; i <= right.a[0]; ++i){
            this->a[i] = right.a[i];
        }
        return *this;
    }
    bigint operator*(int right){
        bigint ans(*this);
        unsigned long long d = 0;
        for(int i = 1; i <= ans.a[0]; ++i){
            d += ans.a[i] * right;
            ans.a[i] = d % MOD;
            d /= MOD;
        }
        int ptr = ans.a[0] + 1;
        while(d != 0){
            ans.a[ptr++] = d % MOD;
            d /= MOD;
        }
        for(int i = ptr; ans.a[ptr] == 0; --ptr);
        ans.a[0] = (ptr == 0) ? 1 : ptr;
        return ans;
    }
    void print(){
        printf("%d", a[a[0]]);
        if(a[0] != 1)for(int i = a[0] - 1; i >= 1; --i){
            printf("%04d", a[i]);
        }
        printf("\n");
    }
    bool operator <(const bigint& right){
        if(this->a[0] != right.a[0])return this->a[0] < right.a[0];
        for(int i = a[0]; i >= 1; --i){
            if(this->a[i] != right.a[i])return this->a[i] < right.a[i];
        }
        return false;
    }
}

回复

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

正在加载回复...