小信变数字 题目ID:20296 必做题 100分

时间限制: 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值