题目:https://codeforces.com/problemset/problem/1538/F
题目:两个正整数 和
,每次对
到
。
例如:=909,
变成910,改变了2个数字;
=9,
变成10,改变了2个数字;
=489999,
变成490000,改变了5个数字;
求,从 到
的过程中多少个数字改变?
我们可以发现,如果位数变化的话会有多余的变化,所以对位数上的数字分别处理:
- 个位:每次改变1 。
- 十位:每次改变11。 0~10 ,10~20会有一个十位的变化。
- 百位:每次改变111。 0~100其中90~100会有12的变化,其他为11次,和为111。
- 同理可得千位为1111。
- 以此类推。
所以我们只需要对的每位进行加法,
的每位进行减法。
#include <iostream>
using namespace std;
typedef long long int ll;
int main()
{
ll a[10];
a[0] = 1;
for (int i = 1; i < 10; i++)
{
a[i] = a[i - 1] * 10 + 1;
}
int t;
cin >> t;
while (t--)
{
ll l, r;
cin >> l >> r;
ll ans = 0;
for (int i = 0; i < 10; i++)
{
ans += (r % 10) * a[i];
ans -= (l % 10) * a[i];
r /= 10;
l /= 10;
}
cout << ans << endl;
}
}