细节题
ABC238 C - digitnum
题目链接
https://atcoder.jp/contests/abc238/tasks/abc238_c
解析
是一个比较容易找规律的数学题,坑点在于取模,史上见过最恶心的取模题,很多很多地方都容易爆long long.
对于式子:((a + 1) * a / 2)% mod的分析,a为long long
- a * (a + 1)为偶数,可以直接/2,不用转化成*2的逆元
- 对(a + 1)和 a 分别取模再相乘,一定要记得加括号,要不然会默认从左往右乘
Ac代码
点击查看代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll mod = 998244353;
ll get(int n){
ll ans = 1;
for(int i = 1; i < n; i ++) ans *= 10; //最小的n位数
return ans;
}
ll n;
int main()
{
scanf("%lld", &n);
ll m = n, t = 0;
while(m > 0){
m /= 10;
t ++;
}
ll ans = 0;
for(int i = 1; i < t; i ++){
ll x = get(i);
ll num = 9 * x % mod;
ans = (ans + ((num % mod) * ((1 + num) % mod) / 2)) % mod;
//cout << (num % mod * (1 + num) % mod / 2) % mod << endl;
}
n = (n - get(t) + 1);
ans = (ans + (n % mod) * ((1 + n) % mod) / 2) % mod;
printf("%lld\n", ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架