求条ABC357D,类似于快速幂,最后一个样例过不了
#include<bits/stdc++.h>
#define ll long long
#define int long long
#define pii pair<int,int>
#define pll pair<ll,ll>
using namespace std;
const int N=2e5+15;
const int IINF=0x3f3f3f3f;
const long long LINF=0x3f3f3f3f3f3f3f3fll;
inline void FileIO(){
freopen(".in","r",stdin);
freopen(".out","w",stdout);
}
template<typename Type>
inline void read(Type& res){
Type f=1,x=0; char c=' '; while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}
while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar();
res=x*f;
}
ll n,m;
const ll mod=998244353;
ll ans;
map<ll,ll> mp;
ll QuickPow(ll a,ll b){
ll res=1;
while(b){
if(b&1) res=res*a%mod;
b>>=1;
a=a*a%mod;
}
return res;
}
ll Solve(ll x){
ll res=0,y=x,lst=0,cnt=0;
while(y){
if(y&1){
res=(QuickPow(10,m*lst)*x%mod+res)%mod;
lst=(1ll<<cnt);
}
y>>=1;
x=(QuickPow(10,m*(int)(log10(x)+1))*x%mod+x)%mod;
cnt++;
}
return res;
}
signed main(){
read(n);
ll res=n;
for(int i=1;i<=19;i++){
if(res) m=i;
res/=10;
}
// printf("M=%lld\n",m);
printf("%lld\n",Solve(n));
return 0;
}
//1000000000000000000