#include <stdio.h>
#include <string.h>
#define MOD 20123
int ten[110],len;
char s[10000];
int cal(int x, int i, int temp)
{
int ret=0;
if (s[i]-'0'==x)
{
for (int j=len-1;j>i;--j)
ret+=(s[j]-'0')*ten[len-1-j]%MOD;
ret=(ret+1)%MOD;
}
else if (s[i]-'0'>x)
ret=ten[len-1-i];
return ret;
}
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
ten[0]=1;
for (int i=1;i<110;++i)
ten[i]=ten[i-1]*10%MOD;
while (scanf("%s",s)!=EOF)
{
len=(int)strlen(s);
int ans=0,temp=0;
for (int i=len-1;i>=0;--i)
{
ans=(ans+(s[i]-'0')*temp)%MOD; //temp用来求每次低位循环含有的1 2数
ans=(ans+cal(1,i,temp))%MOD;
ans=(ans+cal(2,i,temp))%MOD;
temp=(10*temp+2*ten[len-1-i])%MOD;
}
printf("%d\n",ans);
}
return 0;
}
/**************************************************************
Problem: 1491
User: cust123
Language: C++
Result: Accepted
Time:0 ms
Memory:1032 kb
****************************************************************/
题目1491:求1和2的个数
最新推荐文章于 2022-11-16 00:07:24 发布