数字和-2019 年大沥镇信息学初中组试题

2020-11-17  本文已影响0人  何景根

题目描述

对于一个正整数 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;
        
    }
}
上一篇下一篇

猜你喜欢

热点阅读