时间限制: 2000ms
空间限制: 262144kB
题目描述
小信被给定两个整数 l 和r,其中 l<r。从 ll 开始,每次加 1 直到结果等于 r。每次加法操作会改变多少个数字的位数,并且改变的位数总是结果中的后缀部分。
例如:
如果 l=909,则加一后得到 910,会改变 2 个数字的位数;
如果 l=9,则加一后得到 10,同样会改变 2 个数字的位数;
如果 l=489999,则加一后得到 490000,会改变 5 个数字的位数。
请输出每个测试用例中,从 l 到 r 的过程中总共改变了多少个数字的位数。
输入格式
第一行包含一个整数 t(1≤t≤104)。接下来有 tt 个测试用例。
每个测试用例由两个整数 l 和 r 描述(1≤l<r≤109)。
输出格式
对于每个测试用例,计算从 l 开始加 1 直到达到 r 的过程中,总共改变了多少个数字的位数。
样例
Input 1
4 1 9 9 10 10 20 1 1000000000
Output 1
8 2 11 1111111110
数据范围
对于 10% 的数据,t≤10,r≤105
对于 20% 的数据,r≤105
对于 100% 的数据,无特殊限制。
由于集训原因,代码进给出注释,需自己填写
#include <bits/stdc++.h>
using namespace std;
int countChanges(int l, int r) {
int ans=①;//初始值为l,r的差值
while(②){//r>0
ans+=③;//一次加上r的每一位
⑤;
}
while(⑥){//l>0
ans-=⑦;//一次减去l的每一位
⑧;
}
return ans;
}
int main() {
int l, r;
int n;
cin>>n;
while(n--){
cin>>l>>r;
cout<<countChanges(l,r)<<endl;
}
return 0;
}