Codeforces Round #725 (Div. 3)F. Interesting Function
给两个数字l和r, 求从l加到r中间digit的变化个数是多少.
这题用的方法和D一样,就是先求R的答案, 然后减去L的答案, 具体的求法是通过观察: 比如21这个数, 从1->9 是9个1位改变, 9->10是1个2位, 10->19是9个1位改变, 19->20是2个1位改变. 20->21 是1个1位改变, 所以加起来就是21+2, 有次可推,数字123是123+12+1.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t;
cin >> t;
while (t --)
{
int l,r;
cin >> l >> r;
auto count = [&](int n) -> int64_t {
int base = 10;
int digit = 1;
int64_t res = 0;
while (n)
{
res += n;
n /= base;
}
return res;
};
cout << count(r) - count(l) << endl;
}
return 0;
}