题目描述
对于一个正整数 X,把它的各位数字相加得到一个新的整数,如果新的整数大于等于 10,继续把它的各位数字相加,又得到一个新的整数......重复这个步骤,直到新的整数只含一个数字,记最后的这个数字是 X 的价值。
例如:X=197,那么新的 X=1+9+7=17,再继续,X=1+7=8,由于 8 只含有一个数字,所以停止,所有 197 的价值等于 8。
现在有 Q 个询问,第 i 个询问的格式是给出两个正整数:Li 和 Ri,表示的意义是:求区间[Li,Ri]里面每个整数的价值的加起来的总和。
数据范围:40%的数据,Ri-Li<=1000.
输入格式
输入格式: : d.in
第一行,一个整数 Q。 1 <= Q <= 100。
接下来是 Q 行,第 i 个行给出两个正整数:Li 和 Ri。1 <= Li, Ri <= 2^60。
输出格式
输出格式: : d.out
对于每个询问,输出一个整数答案后换行。
输入/输出例子1
输入:
样例一:
1
1 5
样例二:
2
9 13
44 45
输出:
样例一:
15
样例二:
19
17
代码
#include<bits/stdc++.h>
using namespace std;
int q;
int main(){
cin>>q;
while(q--){
long long l,r,ans=0;
cin>>l>>r;
//多少个轮回
long long n=(r-l+1)/9;
ans=n*45;
// long long m=(r-l+1)%9;
long long a=l+(n*9);
for (long long i=a;i<=r;i++)
{
if (i%9==0) ans+=9;
else ans+=i%9;
}
cout<<ans<<endl;
}
}
网友评论