題目描述
對于一個正整數(shù) X,把它的各位數(shù)字相加得到一個新的整數(shù),如果新的整數(shù)大于等于 10,繼續(xù)把它的各位數(shù)字相加,又得到一個新的整數(shù)......重復(fù)這個步驟,直到新的整數(shù)只含一個數(shù)字,記最后的這個數(shù)字是 X 的價值。
例如:X=197,那么新的 X=1+9+7=17,再繼續(xù),X=1+7=8,由于 8 只含有一個數(shù)字,所以停止,所有 197 的價值等于 8。
現(xiàn)在有 Q 個詢問,第 i 個詢問的格式是給出兩個正整數(shù):Li 和 Ri,表示的意義是:求區(qū)間[Li,Ri]里面每個整數(shù)的價值的加起來的總和。
數(shù)據(jù)范圍:40%的數(shù)據(jù),Ri-Li<=1000.
輸入格式
輸入格式: : d.in
第一行,一個整數(shù) Q。 1 <= Q <= 100。
接下來是 Q 行,第 i 個行給出兩個正整數(shù):Li 和 Ri。1 <= Li, Ri <= 2^60。
輸出格式
輸出格式: : d.out
對于每個詢問,輸出一個整數(shù)答案后換行。
輸入/輸出例子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;
}
}