题解:洛谷 P4942 小凯的数字

【题目来源】

洛谷:P4942 小凯的数字 - 洛谷

【题目描述】

小凯有一天突发奇想,写下了一串数字:\(\overline{l(l+1)(l+2)...(r-1)r}\)

例如:\(l=2,r=5\) 时,数字为:\(2345\)

\(l=8,r=12\) 时数字为:\(89101112\)

小凯很喜欢数字 \(9\),所以他想问你他写下的数字除以 \(9\) 的余数是多少?

例如:\(l=2,r=5\) 时,\(2345\bmod9 = 5\)

【输入】

第一行为数字 \(Q\),表示小凯有 \(Q\) 个问题。

\(2\)\(Q+1\) 行,每行两个数字 \(l,r\) 表示数字范围。

【输出】

对于每行的问题输出一行,一个数字,表示小凯问题的回答。

【输入样例】

2
2 5
8 12

【输出样例】

5
5

【算法标签】

《洛谷 P4942 小凯的数字》 #模拟# #数学# #高精度# #逆元#

【代码详解】

#include <bits/stdc++.h>
using namespace std;

#define int long long  // 将int定义为long long类型,避免大数溢出

int q, l, r, a, b, ans;  // q: 查询次数,l,r: 区间端点,a,b: 临时变量,ans: 结果

signed main()  // 使用signed main()替代int main(),因为int被重定义为long long
{
    cin >> q;  // 读入查询次数
  
    while (q--)  // 处理每个查询
    {
        cin >> l >> r;  // 读入区间[l, r]
        ans = 0;  // 初始化结果
      
        // 计算区间内所有数字的数位和模9的结果
        // 利用数论性质:一个数的数位和模9等于该数本身模9
        // 区间[l, r]内所有数字的和模9等于这些数字模9的和再模9
        for (int i = l % 9; i <= r % 9 + 9; i++)
        {
            ans += i;  // 累加模9的余数
        }
      
        // 输出最终结果模9
        cout << ans % 9 << endl;
    }
  
    return 0;
}

【运行结果】

2
2 5
5
8 12
5
posted @ 2026-02-20 20:01  团爸讲算法  阅读(0)  评论(0)    收藏  举报