【算法日记 09】蓝桥杯实战:突破整数极限,拥抱“字符串思维”

张开发
2026/4/16 10:55:23 15 分钟阅读

分享文章

【算法日记 09】蓝桥杯实战:突破整数极限,拥抱“字符串思维”
【算法日记 09】蓝桥杯实战突破整数极限拥抱“字符串思维” 场景引入一道充满诱惑的规律题今天在备战蓝桥杯时遇到了一道非常经典的“打印规律题”。 题目要求基于循环字符串2026打印出这样的图形第 1 行2 第 2 行20 第 3 行202 第 4 行2026 第 5 行20262 …看完这个递增的数字图形很多人脑海里弹出的第一个想法是数学滚雪球法long long res 0; for(int i 0; i n; i) { res res * 10 提取出来的个位数; cout res endl; }逻辑完美在自己电脑上输入n 5完美跑通于是自信满满地提交。 结果评测机无情地甩出一个大大的 WA答案错误 案发现场大解剖隐藏的“百位级”炸弹一切的玄机都藏在题目的最后一行数据规模1≤n≤1001 \le n \le 1001≤n≤100。在 C 中数据类型是有物理极限的• 普通的int最多装下约 10 位数21 亿。• 哪怕是升级成超大容量的long long最多也就装下 18~19 位数。而题目给的N100N 100N100意味着第 100 行要打印出一个长度为 100 位的超级巨无霸数字 当你用数学乘法算到第 19 行时long long就会被瞬间撑爆Integer Overflow变成一个极其诡异的负数后面的 80 多行全军覆没✨ 满级降维打击字符串拼接法在大厂笔试和算法竞赛中有一条极其重要的铁律只要不需要对数字进行加减乘除运算仅仅是为了输出显示永远优先使用string字符串字符串没有所谓的“位数限制”别说 100 位就算 10 万位它也能像接火车一样轻松拼在一块。结合求余数%的周期规律我们可以写出极其优雅的光速 AC 代码。 满分 AC 模板#includeiostream#includestringusingnamespacestd;intmain(){// 竞赛必备读写极速引擎ios::sync_with_stdio(false);cin.tie(0);intn;// 严谨输入if(!(cinn))return0;string a2026;string res;// 用一个空字符串当作接火车的容器for(inti0;in;i){// 降维打击直接利用求余数 % 循环提取字符接在字符串尾巴上resa[i%4];// 极速换行打印coutres\n;}return0;} 总结这道题看似考的是“找规律”实际上考的是选手对数据范围极限的敏感度。 下次在算法题里看到数字一定要先问自己一句“它会不会超过 18 位它真的是用来算的还是只是用来打印的” 转变思维用字符串应对超大数才是真正的竞赛老手

更多文章