D - 88888888

lightsong發表於2024-06-08

D - 88888888

https://atcoder.jp/contests/abc357/tasks/abc357_d

思路

Code

https://atcoder.jp/contests/abc357/submissions/54384091

LL n;

LL base = 998244353;

LL getlen(LL n){
    LL cnt = 0;
    while(n){
        cnt++;
        
        n /= 10;
    }

    return cnt;
}

LL ksm(LL a, LL b)
{
    LL t = 1;
    while (b)
    {
        if (b & 1) t = t * a % base;
        a = a * a % base, b >>= 1;
    }
    return t;
}

int main()
{
    cin >> n;

    LL len = getlen(n);
//    cout << len << endl;

    LL powsum = 0,powone;
    if(len==19){
        powone=((LL)ksm(10,18)%base)*10%base;
    }
    else{
        powone = ksm(10, len);
    } 
    
    powone %= base;
    
//    LL powi = 1;
//    for(LL i=0; i<n; i++){
//        if (i == 0){
//            powi = 1;
//        } else {
//            powi *= powone;
//            powi %= base;
//        }
//        
//        powsum += powi;
//        powsum %= base;
//    }
    
    powsum = (ksm(powone, n)%base -1)%base;
    powsum = powsum*ksm(powone-1,base-2)%base;
    
    LL sum = (n%base)*powsum;
    sum %= base;

    cout << sum << endl;

    return 0;
}

相關文章