描述
Carryon 最近迷上了数数字,然后 Starry 给了他一个区间 [l, r] ,然后提了几个要求,
- 需要将 l 到 r 之间的数全部转化成 16 进制,然后连起来。
- 将连起来的数又转化成 10 进制。
- 将最终结果对 15 取模。
数据范围:1<=l<=r<=1000000000000
输入
单组输入 l 和 r 的值
输出
输出最终结果。
输入样例
10 14
输出样例
0
小提示
如:10、11、12、13、14的16进制分别是a、b、c、d、e。依次连在一起是abcde,转换成10进制是703710,对15取模为0。
思路:
对于区间[l , r]中的数,{l, l+1, l+2, ...... , r}
我们可以发现对于每个数看作16进制,变成
对于每一个数可以表示成,将所有的
模了15之后,就变成了
而就是l%15之后的结果(根据)
而对64位的数,所有的情况不过16*16种情况,前一项和后一项只不过是+1的关系
具体看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll l,r;
int main(){
scanf("%lld %lld",&l,&r);
ll ans=0;
for(ll i=l%15; i<200; i++){
if(i == l%15) ans+=i;
else ans+=(i%15);
ans%=15;
if(i%15 == r%15) break;
}
printf("%lld\n",ans);
}