abc233_e Σ[k=0..10^100]floor(X/10^k) 题解
Σ[k=0..10 ^ 100]floor(X/10 ^ k)
题意
给定一个整数
数据范围
思路
看数据范围就知道:long long
存不下,需要高精度。
直接高精度会达到
又要推一下了,画个草图看看。
可以发现,在样例1中:
- 个位、十位、百位、千位都可以对答案的个位做出贡献。
- 十位、百位、千位都可以对答案的十位做出贡献。
- 百位、千位都可以对答案的百位做出贡献。
- 千位可以对答案的千位做出贡献。
再稍微推一推,就可以发现:
- 若
- 那么答案就是
- 那么答案就是
复杂度
- 时间:
- 空间:
Code
点击查看代码
#include <iostream> #include <vector> #include <string> using namespace std; const int N = 6e5 + 10; string s; // x 太大了,得用字符串 int n, ans[N], sum, lans = 1; void P () { int len = n + 1; for (int i = 0; i < len; i++) { // 处理进位 ans[i + 1] += ans[i] / 10; ans[i] %= 10; } while (len > 1 && !ans[len - 1]) { // 处理前导零 len--; } lans = len; } void Cout () { for (int i = lans - 1; i >= 0; i--) { // 从最高位开始输出 cout << ans[i]; } } int main(){ ios::sync_with_stdio(0), cin.tie(0); cin >> s; n = s.size(); for (int i = 0; i < n; i++) { sum += s[i] - '0'; // 前缀和思想 ans[n - i - 1] = sum; // 去处理答案第 n - i - 1 位(第0位为个位) } P(); // 最后再处理进位 Cout(); return 0; }
本文作者:wnsyou の blog
本文链接:https://www.cnblogs.com/wnsyou-blog/p/17176520.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步