给定正整数N,函数F(N)表示小于等于N的自然数中1和2的个数之和,例如:1,2,3,4,5,6,7,8,9,10序列中1和2的个数之和为3,因此 F(10)=3。输入N,求F(N)的值,1=<N<=10^100(10的100次方)若F(N)很大,则求F(N)mod20123的值
输入样例
10
10
输出样例
3
3
#include <stdio.h>
#include <string.h>
int min(int a,int b);
void main()
{
char s[102];
int n;
while(scanf("%s",s)>0)
{
int i,t;
int r=0,c=0,h=0;
n=strlen(s);
for(i=0;i<n;i++)
{
t = s[i] - '0';
r = (r-h)*10 + c*2 + h*(t + 1) + min(t , 2);
c = c*10 + t;
if(t==1 || t==2) h++;
c%=20123;
r%=20123;
}
printf("%d\n",r);
}
}
int min(int a,int b) {return (a<b)?a:b;}