求助,本地结果与在线ide不同
查看原帖
求助,本地结果与在线ide不同
736738
Alorithm楼主2023/8/5 21:29

我测了下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;
}
2023/8/5 21:29
加载中...