我测了下1 1e18的数据
本地跑出来是3970
在线结果却是随机数
#include<bits/stdc++.h>
using namespace std;
using i64 = long long;
const i64 mod = 1e9 + 7;
int t;
i64 a, b;
i64 f[10][100];
void init() {
i64 base = 1;
for (int j = 1; j <= 80; j++) {
f[0][j] = f[9][j - 1];
for (int i = 1; i <= 9; i++)
f[i][j] = (f[i][j] + f[i - 1][j] + f[9][j - 1] + base * i) % mod; //4999 = f3999 + f999 + 4 * 1000
base = (base * 10) % mod;
}
}
i64 getnum(const vector<i64> &num, int n) {
i64 res = 0;
while (n) {
res = (res * 10 + num[n]) % mod;
n--;
}
return (res + 1) % mod;
}
i64 sum(i64 x) {
vector<i64> num(1, 0);
while (x) {
num.push_back(x % 10);
x /= 10;
}
i64 res = 0;
for (int i = num.size() - 1; i >= 1; i--)
res = (res + f[num[i] - 1][i] + getnum(num, i - 1) * num[i] ) % mod; // 4123=f3999 + 4*(124) + f123
return res % mod;
}
void solve() {
cin >> a >> b;
i64 ans1 = sum(a - 1), ans2 = sum(b);
//cout << ans2 << endl;
cout << (ans2 - ans1 + mod) % mod << endl;
}
int main() {
init();
cin >> t;
while (t--) {
solve();
}
return 0;
}