前言:刚刚看到这个问题,真的没啥思路,看了题解才发现,每一位都不能有进位,必须是线性的才行,如果有进位就无法弥补,那么我们用什么方法快速求呢,我们如何处理0的问题呢?
其实题目给的 l r 都是限制我们的位数,我们直接在我们当成组合数学来做就行,然后右边的数量减去左边的数量
#include<bits/stdc++.h>
using namespace std;
#define int long long
// 1 2 3
const int Mod = (int)1e9 + 7;
int l,r,k,t;
int qw(int x,int p){
int ans = 1;
while(p){
if(p&1) ans = ans * x % Mod;
x = x * x % Mod;
p >>= 1;
}return ans;
}
signed main(){
cin >> t;
while(t--){
cin >> l >> r >> k;
int u = ((qw(9/k+1,r) - qw(9/k+1,l))% Mod + Mod) % Mod;
cout << u << endl;
}
}