问题描述
设 F(N) 表示正整数 1 到正整数 N 中,数字 1,2 总共出现了多少次。例如 N = 10 时:1, 2, 3, 4, 5, 6, 7, 8, 9, 10 这 10 个数中,数字 1 出现了两次,数字 2 出现了 1 次,所以数字 1, 2 总共出现了 3 次,因此 F (10) = 3。
现在给你正整数 N ,请你求出 F(N) 的值。由于 F(N) 可能很大,你仅需输出 F(N) 除以 20123 的余数。
输入格式
输入数据仅一行,包含一个正整数 N (1 ≤ N ≤ 10100 ),表示函数 F(N)的参数。
输出格式
输出仅一个整数,为 F(N) 除以 20123 的余数。
样例输入
10
样例输出
设 F(N) 表示正整数 1 到正整数 N 中,数字 1,2 总共出现了多少次。例如 N = 10 时:1, 2, 3, 4, 5, 6, 7, 8, 9, 10 这 10 个数中,数字 1 出现了两次,数字 2 出现了 1 次,所以数字 1, 2 总共出现了 3 次,因此 F (10) = 3。
现在给你正整数 N ,请你求出 F(N) 的值。由于 F(N) 可能很大,你仅需输出 F(N) 除以 20123 的余数。
输入格式
输入数据仅一行,包含一个正整数 N (1 ≤ N ≤ 10100 ),表示函数 F(N)的参数。
输出格式
输出仅一个整数,为 F(N) 除以 20123 的余数。
样例输入
10
样例输出
3
#include "iostream"
#include "algorithm"
#include "vector"
#include "set"
#include "string.h"
#include "stdio.h"
using namespace std;
struct bign
{
int d[1000];
int len;
bign()
{
len=0;
memset(d,0,sizeof(d));
}
bign(string s)
{
len=0;
memset(d,0,sizeof(d));//即使是有字符串赋值,也不能忘记开始时赋0
len=s.length();
for(int i=0; i<len; i++)
d[i]=s[len-1-i]-'0';
}
bign operator+(bign b)
{
bign c;
int carry=0;
for(int i=0; i<len||i<b.len||carry; i++)
{