逆序的三位数这道题挂在基础题目集里标签是10分看起来像是用来凑数的那种。但我在带新人的过程中发现这10分的题能把人卡住半小时甚至更久而且卡住的地方五花八门——有人被前导零绊倒有人把%d%d%d直接拼出去结果输出了007还有人本地跑得好好的一提交就是答案错误。这道题的题干短得可怜三行话却把整数取模、整除取位、字符串反转、数值与字符的转换、输出格式控制这几件事全串了一遍。如果你刚接触编程、正在啃基础题目集、或者想快速摸清在线判题系统的脾气这道题是非常合适的练手对象。下面我按当初踩坑的顺序把三种解法、边界情况、调试手段和延伸套路全摊开讲一遍代码以C/C为主Python和Java的写法也一并给上。1. 题目到底在考什么1.1 需求原样拆解三句话里的三个约束先把题干还原成工程语言。这道题的要求是读入一个正的三位数输出它按位逆序后的数字如果输入数字的末尾带0输出的结果不能有前导零。这短短一段描述其实埋了三个硬约束每一个都对应一类常见错误。第一个约束是正的三位数。这句话的价值在于排除了一堆边界情况不用考虑输入是0、不用考虑两位数、不用考虑负数,自然也就不用担心负数取模的符号问题。很多同学看到这里会觉得松了口气,殊不知这个善意恰恰是陷阱,因为它让你养成了不做边界检查的坏习惯。第二个约束是按位逆序。注意,不是输出反转后的字符串,而是输出反转后的数字。这两个说法在数学上等价,在输出表现上却天差地别。700按字符串反转是007,按数字反转是7。题目用数字这个词,就是在明确告诉你输出不应该带前导零。第三个约束是不能有前导零。这是整道题的题眼,90% 的错误答案都栽在这里。有意思的是,如果你用数值计算的路子来做,这个约束会自动满足,根本不用单独写判断;而如果你用字符串的路子来做,就必须手动剥掉。这种解法决定陷阱位置的现象,在后面几节里我会反复提到。1.2 结尾零才是真正的考点拿700走一遍。按位拆开是7、0、0,逆序排列得到0、0、7。如果按字符原样拼起来,结果是字符串007;如果按数字加权合成,结果是0×100 0×10 7 7。判题系统期望的是后者。再拿120试。拆开是1、2、0,逆序是0、2、1,数值合成0×100 2×10 1 21。字符拼接会得到021。同样,期望21。拿103试。逆序字符是301,这里首字符是3不是0,数值合成301。这种情况两种方式的输出一致,所以它并不是有效的测试点——很多人恰恰是只测了103就以为自己做对了。所以真正能区分解法的测试数据只有两类:末尾一个零的(如120、350),和末尾两个零的(如700、900)。另外100这种极端情况也值得单独测一次,逆序后是001→1,是能出的最小结果。记住一个规律:三位数按位逆序后,前导零的个数等于原数末尾零的个数。末尾有几个零,结果就少几位。这条规律在你自己构造测试数据时特别好用。2. 三条实现路线与选型逻辑2.1 取模除法法:让数学帮你干掉前导零这是我最推荐的写法,也是这道题的本意。核心思想是:用% 10取出个位,用/ 10把数字整体右移一位,循环或者手写三次,把三个数位分别拿到a、b、c三个变量里,再按a*100 b*10 c合成输出。关键点在于合成这一步。你拿到的是三个整数,不是三个字符。整数做加法和乘法,前导零在数值层面根本不存在——0*100就是0,0*10就是0,加起来的和自然不会有前导零。字符拼接之所以出问题,是因为字符串里的0是一个占位符号,它有自己的宽度,而数字0没有。具体拆解过程,拿n 358举例:a n % 10 8,个位;b n / 10 % 10 35 % 10 5,十位;c n / 100 3,百位;输出a * 100 b * 10 c 800 50 3 853。再拿n 700走一遍:a 0,b 0,c 7,输出0 0 7 7。完美,不需要任何额外判断。这个写法的另一个好处是不依赖语言的字符串库。C 语言里没有内置的字符串反转函数,用字符数组得自己写循环交换,或者用strrev这种非标准扩展(在部分编译器上根本不存在)。用取模法,一个printf就结束了,干净利落。有个细节需要留意:n / 10 % 10这个表达式的运算顺序是从左到右,先整除再取余,和你手算的顺序一致,不用加括号。但如果你想写得更保险、更易读,加个括号(n / 10) % 10也没坏处,反正编译器会优化掉。2.2 字符串反转法:代码最短,但陷阱挪了位置另一条路是把输入当字符串读进来,反转之后转回整数输出。C 里两行搞定:string s; cin s; reverse(s.begin(), s.end()); cout stoi(s) endl;Python 更夸张,一行:print(int(input()[::-1]))Java 也不长:String s new Scanner(System.in).next(); System.out.println(Integer.parseInt(new StringBuilder(s).reverse().toString()));看起来很美,但这条路的陷阱全在转回整数这一步上。如果你忘了stoi、parseInt或者int()这个转换,直接输出字符串,700就会变成007,当场错误。很多人在本地测123通过了,信心满满提交,结果挂在700上,就是因为本地随手写的测试数据太温和。还有个更隐蔽的问题:stoi是 C11 才进标准库的。如果你的判题环境用的是老编译器(这种情况在部分在线判题系统上确实存在),编译会直接报错,提示找不到stoi。替代方案是用atoi(s.c_str()),这是 C 标准库的函数,兼容性好得多,但要注意它接受的是const char*,所以得做一次转换。字符串法不是没有优势。如果你的目标不是这道三位数题,而是想练任意长度数字串反转这种能力,那字符串路子更通用——reverse一下就行,不用管有几位。三位数正好是手写取模三次和字符串反转两条路都舒服的区间,这也是这道题作为入门题的价值所在:它是两种思维方式的分水岭。2.3 四种语言写法对照表把主流语言的完整写法列一遍,方便你按自己正在学的语言对号入座。表格里我给的都是取模法,因为它在四个语言里都能一次写对,没有隐藏的 API 依赖。语言取模法核心代码需要的头文件/包备注Cscanf(%d,n); an%10; bn/10%10; cn/100; printf(%d\n, a*100b*10c);#include stdio.h最省事,无字符串操作Ccin n; int an%10, bn/10%10, cn/100; cout a*100b*10c endl;#include iostream注意别用printf混搭cout,容易乱序Pythonn int(input()); print((n%10)*100 (n//10%10)*10 n//100)无//是整除,/会得到浮点数Javaint n sc.nextInt(); int an%10, bn/10%10, cn/100; System.out.println(a*100b*10c);import java.util.Scanner;类名必须是Main(多数判题系统要求)Python 那行要单独强调一下://和/的区别。在 Python 3 里,35 / 10得到3.5,是浮点数;35 // 10才是3。如果你顺手写成n/10%10,拿到的会是3.5 % 10 3.5,再乘 10 就变成35.0,输出会变成853.0这样的浮点格式,判题系统按字符串比对,直接判错。这个坑我在新手代码里见过不止一次。Java 那个类名必须是Main也是硬性要求。多数在线判题系统用文件名当类名去做编译,你的文件叫Main.java类就必须叫Main,否则编译报错class Main is public, should be declared in a file named Main.java。这个报错和算法无关,但每天都有大量新人在上面卡住。3. 从零到提交的完整实操3.1 输入环节:别在这一步就翻车输入格式是每个输入包含1个测试用例,即一个正的三位数。单组数据,一行,一个整数。C 语言里scanf(%d, n)是最稳的。有同学喜欢用gets或者fgets读整行再自己解析,在这个场景下纯属自找麻烦。还有同学用getchar逐个字符读,也不是不行,但要自己处理换行符,容易出错。C 的cin n会自动跳过前导空白,读整数很方便。这里有个小提醒:如果你在同一个程序里混用cin和scanf,记得同步或者干脆别混,不然输入流的位置可能对不上,读到的是脏数据。这道题只有一个输入,混用一般不会出问题,但养成不混用的习惯更好。Python 的input()读进来是字符串,必须int()转一次。这一步漏了的话,input()[::-1]得到的是反转字符串,后面的算术运算会报类型错误,报错信息还挺难懂,TypeError: unsupported operand type(s),新手容易看懵。Java 用Scanner就好,nextInt()读整数。要注意Scanner读完之后不必关闭,System.in关了在某些环境下反而会出问题。另外Scanner比BufferedReader慢,但这道题数据量极小,性能完全不是问题,别为了这点速度去写BufferedReader加手写解析,反而增加出错概率。还有一个常被忽略的点:读入失败怎么办。有的同学写while (scanf(%d, n) ! EOF),这是多组数据的写法。这道题只有一组,你这么写也不会错(循环执行一次就结束),但如果判题系统只给一组数据,某些严格的检查可能会因为多余的处理产生差异。稳妥起见,按题意单组读就行。3.2 核心代码逐行注释版把 C 语言的完整实现写出来,每一行都加上为什么这么写的注释,方便你直接对着改。#include stdio.h int main(void) { int n; // 读入三位正整数,scanf 返回成功读入的项数,正常情况下是 1 if (scanf(%d, n) ! 1) { return 0; // 读不到就直接退出,避免后续用未初始化的 n } int a n % 10; // 个位:123 % 10 3 int b n / 10 % 10; // 十位:123 / 10 12,12 % 10 2 int c n / 100; // 百位:123 / 100 1 // 按百、十、个重新加权合成。数值相加天然不带前导零 int result a * 100 b * 10 c; printf(%d\n, result); // 末尾换行,保持输出干净 return 0; }if (scanf(...) ! 1)这个检查很多人省略,理由是题目保证有输入。这话没错,但养成检查习惯的成本几乎为零,收益是不管在什么环境下都不会拿一个未初始化的变量去做运算。未初始化变量的值在 C 里是不确定的,可能是一个很大的随机数,拿它做除法还可能触发除零异常,排查起来极其痛苦。result单独用变量存一下,而不是直接塞进printf,好处是调试的时候可以在里面打个断点看一眼中间值。直接写printf(%d\n, a*100 b*10 c)更短,但调试时看不到变量。两种写法都对,看你当前是需要省字数还是需要看中间状态。C 版本几乎一样,只是输入输出换掉:#include iostream using namespace std; int main() { int n; cin n; int a n % 10; int b n / 10 % 10; int c n / 100; cout a * 100 b * 10 c endl; return 0; }Python 版本,顺便演示一下字符串法作为对照:# 写法一:取模合成,推荐 n int(input()) a, b, c n % 10, n // 10 % 10, n // 100 print(a * 100 b * 10 c) # 写法二:字符串反转后转整数,更短 print(int(input()[::-1]))两个写法都对。第二种更短,但要注意int()不能省,省了就是错的。第一种啰嗦一点,但每一步都能看懂,适合建立数位拆解的手感。我一般建议新手先把第一种写熟,再去用第二种。3.3 自测数据集设计本地测什么数据,决定了你能不能一次提交通过。我整理了一份覆盖度比较全的表,按能测出什么错误来分类,你直接照抄进本地测试文件就行。输入期望输出能测出什么问题123321最基本的逆序,测方向有没有搞反1001两个零结尾,测前导零处理7007两个零结尾,百位最大,测数值合成12021一个零结尾,测中间位为零的情况103301中间是零,结果首位是 3,测不会误删中间零999999全是最大位,测有没有进位溢出111111各位相同,测是不是恒等变换85058十位是 5,零在个位,测两位数结果1001和上面重复一次,强调这是最容易错的103这条特别值得说。很多人一看不能有前导零,就在代码里加了删掉所有零的逻辑,结果103输出成31而不是301。前导零和中间的零是两回事:中间的零是数位的一部分,必须保留;只有反转后跑到开头的、属于原数末尾的那些零,才需要被消失。用数值合成法,这个区别自动处理——因为0 * 10就是0,它不会占位,但它会参与加法。999也是有意加的。三位数逆序后最大还是999,不会溢出int。但如果你写成a * 1000 b * 100 c * 10,权重搞错了,999就会变成9990,一眼能看出来。权重写错是典型的思维跳跃错误,写的时候脑子想着逆序,手上下意识地写了百位乘 1000。3.4 提交前的自查清单提交前花一分钟过一遍这几条,能省下很多次答案错误的提交记录。第一,确认输出没有多余空格。printf(%d%d%d, a, b, c)和printf(%d %d %d, a, b, c)是两码事,后者输出3 2 1,判题系统按字符串严格比对,必然判错。所有位必须连在一起输出,中间不能有分隔。第二,确认用的是数值合成而不是字符拼接。看你的表达式,如果是a*100 b*10 c这种带乘法的,就是数值合成;如果是把三个字符拼成字符串,就得确认有没有剥零。第三,确认整数除法没有被误写成浮点除法。C/C 里int / int自动截断,没问题;Python 里必须用//;Java 里int / int也没问题,但如果中间变量被声明成double就会出问题。第四,确认main函数返回值是0。有的判题系统会把非零返回码当成运行时错误。第五,确认没有把测试用的printf(debug)忘在代码里。这个错误听起来低级,但真的非常常见,尤其是改代码改到一半被打断的时候。4. 排错实录:高频WA与调试手法4.1 WA 原因速查表说几个我在实际帮人看代码时遇到的真实场景(细节做了模糊处理),按出现频率从高到低排。现象典型原因修法输入700输出007逐位输出字符,没有做数值合成改成a*100b*10c或对字符串结果转整数输入103输出31无差别删除所有0只处理尾部零,或者改用数值合成输入123输出123忘记反转,或者反转了两次检查reverse调用次数和取位顺序输出321.0Python 用了/而不是//把单斜杠全换成双斜杠编译报错找不到stoi编译器标准太低改用atoi(s.c_str())编译报错class MainJava 类名和文件名不一致类名改成Main,文件也改名全部测试点都错输出多了空格或少了换行逐字符对比期望输出和实际输出第三行那个反转两次听起来荒谬,但确实有人写reverse(s.begin(), s.end())之后,又在输出前手动从后往前遍历了一遍,两边抵消,输出原样。这种错误在本地跑的时候不容易发现,因为如果你测试数据选的是111或999这种回文数,反转几次都一样。第七行全部测试点都错往往最让人崩溃,因为代码逻辑看起来完全正确。这种情况九成是格式问题:行末多空格、少换行、用了中文标点、输出里混了提示语(比如printf(请输入三位数:))。判题系统不看你的提示语,它只比对标准输出,你多输出一个字都是错。4.2 本地对拍与打表验证如果你怀疑自己的解法有问题,但构造不出能复现的测试数据,可以用打表对拍的办法。思路很朴素:写一个明显正确但可能很慢的版本当作标准答案,再写一个你想验证的版本,让两个程序跑同一批输入,比对输出。对这道题来说,标准答案可以直接用 Python 的一行写法:print(int(input()[::-1]))这个是经过千锤百炼的写法,几乎不可能错。然后你把 100 到 999 这 900 个数全部喂给你的 C 代码和这个 Python 脚本,用 shell 循环跑一遍,把不一致的挑出来。for i in $(seq 100 999); do a$(echo $i | python3 ref.py) b$(echo $i | ./mine) if [ $a ! $b ]; then echo MISMATCH: input$i expected$a got$b fi done这段脚本跑完,如果有输出,那行就是你的问题数据;如果没有任何输出,说明 100 到 999 全对,那你的错误大概率在格式上而不是逻辑上,回头检查空格和换行。这种全量对拍的思路在这道题上成本极低(900 次循环,一秒内跑完),但在复杂题目上可能要跑很久。养成一个习惯:凡是输入范围小、可以穷举的题,都优先考虑全量对拍,比人脑构造边界数据靠谱得多。4.3 几个容易被忽略的细节第一个细节:%和/的优先级。这两个运算符优先级相同,结合方向从左到右,所以n / 10 % 10等价于(n / 10) % 10,没问题。但如果你写成n % 10 / 10,那就是(n % 10) / 10,个位数除以 10 恒为 0,结果全错。这两个符号长得像,敲键盘的时候手一滑就换了位置,而且编译不报错,运行时也不崩溃,就是答案不对,属于最难查的一类错误。第二个细节:C 语言里printf的输出缓冲。正常情况下程序结束会自动刷新缓冲区,输出不会丢。但如果你在return 0之前调用了_exit或者异常终止,缓冲区里的内容可能没被写出去,表现为本地能看到输出,判题系统说输出为空。这道题不会遇到,但知道这回事有好处。第三个细节:输入可能是100,也可能是999,但一定不会小于 100。所以c n / 100的结果一定在 1 到 9 之间,不会出现c为0的情况,这也意味着结果的第一位一定非零——除非a是零。这一点可以用来做二次验证:如果你的输出位数比预期少,那一定是因为末尾有零。第四个细节:不要用浮点数。有人为了方便,把n转成double再逐位取,用fmod和floor操作。这条路能走通,但浮点数的精度问题会让700.0在某些情况下被表示成699.999...,取整之后变成699,输出完全错乱。整数题就用整数做,这是基本原则。5. 从三位数推广出去:这道题真正的余温5.1 通用的整数反转模板三位数只是一个特例。把取模法的思路推广到任意位数,就是经典的整数反转模板:int reverse_int(int n) { int res 0; while (n 0) { res res * 10 n % 10; // 每次把新的一位推到已有结果的末尾 n / 10; // 砍掉已经处理过的个位 } return res; }拿700走一遍:n700,第一轮res 0*10 0 0,n70;第二轮res 0*10 0 0,n7;第三轮res 0*10 7 7,n0,循环结束,返回7。前导零天然消失,因为res从0开始,前面的零乘十还是零。这段模板的价值在于它同时解决了位数未知和前导零两个问题。三位数题里我们手写三次取模,是因为知道只有三位;换成任意位数,循环就是必需品。而循环里的res * 10这个动作,恰好等价于把已有的数字整体左移一位,新来的一位填到个位,顺序自然就反过来了。顺带说一句,这个模板在老版本的面试题里还有个变体:要求判断反转后是否溢出 32 位有符号整数的范围。那就要在res * 10之前做检查,判断会不会超。三位数题不涉及这个,但知道模板有这个边界,对你后面做别的题有好处。5.2 回文判断与数位统计同样的取位手法,换个用法就能解决一批相关问题。回文数判断:一个数正着读和倒着读一样,比如121、1331。做法是先反转,再比较反转前后是否相等。这里有个小技巧:负数不是回文(因为负号在末尾没地方放),末尾是零且数字本身不为零的也不是回文(120反转是21,不相等)。这两个特判在三位数题里用不上,但在完整版回文题里是必须的。数位统计:统计一个数里有多少个3,或者各位数字之和是多少。取位循环里加个计数器就行:int count_digit(int n, int target) { int cnt 0; while (n 0) { if (n % 10 target) cnt; n / 10; } return cnt; }数位拆解存数组:如果要做更复杂的操作(比如按位排序后重新组合),可以边取位边存:int digits[10], len 0; while (n 0) { digits[len] n % 10; n / 10; }存完之后digits[0]是个位,digits[len-1]是最高位,这个顺序是反的,取用的时候注意别弄混。如果后面要做从高位到低位输出,就得倒着遍历数组。5.3 三位数之外:任意位数怎么办如果题目条件从三位数放宽到不超过 10 位的正整数,你手写的三次取模就不够用了,必须换成循环。这时候代码会变成这样:#include stdio.h int main(void) { long long n; if (scanf(%lld, n) ! 1) return 0; long long res 0; while (n 0) { res res * 10 n % 10; n / 10; } printf(%lld\n, res); return 0; }注意int换成了long long。10 位数最大是9999999999,超过了 32 位int的上限(约 21 亿),必须用 64 位。这个细节在三位数题里当然不用管,但如果你把三位数的代码直接复制到任意位数的题里,输入一个十位数就会溢出,输出变成一个莫名其妙的负数或者很小的数。还有一个更极端的情况:如果位数超过long long能表示的范围(比如上千位),数值合成法就彻底失效了,只能退回字符串法。这时候去掉前导零就得手动做:s input().strip() r s[::-1] print(r.lstrip(0) or 0)lstrip(0)剥掉左边的所有零,or 0是兜底——如果输入本身是0(或者全是零),剥完变成空字符串,这时候应该输出0而不是空白。这个or 0的小技巧,是字符串法里必须记住的一条,不然遇到全零输入就会输出空行。所以选型的逻辑其实很清楚:位数少且确定,用取模,代码最短最稳;位数不定但数值不大,用循环取模加long long;位数极大,只能用字符串,同时记得处理剥零后的空串兜底。这道三位数题落在第一种情况,但它给后面两种情况都埋好了入口。拿850手动走一遍完整流程,当作这一节的收尾:读入850,判断三位数无误;a 850 % 10 0,b 850 / 10 % 10 85 % 10 5,c 850 / 100 8;合成0*100 5*10 8 58;输出58。期望输出58,通过。我个人的体会是,这道题最大的价值不在会做,而在第一次做的时候别偷懒。很多人看到 10 分就直接跳过,或者随手写个字符串反转交上去,过了就算了。但如果你认真把取模、整除、加权这三步在心里过一遍,把700、120、100、103这四个数据都跑一遍,后面遇到整数反转、回文数、数位统计这一整类题,基本就不用再重新想思路了。反而是那些跳过去的人,下次遇到同样套路还得再卡一次。基础题目集里这些个位数分值的题,含金量往往不在分数,而在它逼你把某个最基本的操作练到不用想就能写对。
企业数字化 ERP 产品动态
相关推荐
Python socket.timeout读取超时排查与参数配置 半夜两点,监控群里跳出一行红字: socket.timeout: The read operation timed out 。任务昨天还跑得好好的,今天直接挂在第 37 个请求上,重跑一次又好了,再跑一次又挂。这种"抽风式"故障最磨人,… · 2026/11/3 16:11:25
Cesium点渲染技术:PointPrimitiveCollection性能优化实战 1. Cesium可视化中的点渲染技术解析在三维地理信息可视化领域,点要素的高效渲染始终是核心挑战之一。Cesium作为领先的WebGL地球引擎,提供了多种点渲染方案,其中PointPrimitiveCollection与primitives的结合使用堪称性能与灵活性的黄金组合。… · 2026/11/3 16:10:23
品牌烙印体系构建:语言、视觉与产品的协同设计 1. 消费品牌烙印体系的本质解析 在消费品市场高度饱和的今天,品牌想要在消费者心智中留下深刻印象,仅靠单一维度的营销手段已经远远不够。我从业十余年见证过太多"昙花一现"的品牌案例,究其根本都是缺乏系统性的烙印构建。真正有效… · 2026/11/3 16:10:23
AgentScope 2.0多智能体框架:核心特性与Java落地实践 AgentScope这名字这两年听得越来越多,尤其2.0发布之后,朋友圈里好几个做企业级架构的朋友都在转。我大概半年前开始把它引入到实际项目里,从最开始只是拿Python版本做概念验证,到后面用Java版本落地了一个面向内部知识库的多智能体… · 2026/11/3 16:59:56
食品行业全闪存存储方案与ZFS数据管理实践 1. 食品饮料行业数字化转型中的数据存储挑战 在食品饮料制造领域,数据存储系统正从简单的"数据仓库"转变为支撑企业合规运营的核心基础设施。我们以某大型乳制品企业为例,其每天从AOI检测设备产生的产品图像就超过20万张,每张图像平… · 2026/11/3 16:59:56
C语言分支结构:从语法到逻辑建模的工程思维跃迁 1. 这不是“抄答案”,而是用C语言重新理解世界的第一步很多人看到“C语言实验分支结构练习及答案”这个标题,第一反应是翻出教材附录、搜百度文库、复制粘贴交作业——我试过,也教过不少学生这么干。但三年前带某高校计算机基础实验课时&… · 2026/11/3 16:59:56
大模型三层架构拆解:输入侧与输出侧的工程实践 1. 从"中间那层不可动"说起:三层架构的分工逻辑1.1 三层到底指哪三层我拆过不少大模型项目,从最简单的聊天机器人到带RAG的文档助手,再到跑工具调用的Agent,最后发现一个特别朴素的规律:不管前端炫成什么样&… · 2026/11/3 16:59:56
PowerQuery描述性统计实战:从基础到高阶应用 1. PowerQuery描述性统计实战指南 在数据分析工作中,描述性统计就像医生的听诊器,能让我们快速"听"出数据的"心跳"和"呼吸"。作为PowerBI的核心组件,PowerQuery提供了比Excel更强大的数据处理能力。今天我将分… · 2026/11/3 16:59:56
SpringBoot集成微信支付V3:签名验签、证书管理与回调幂等实战 简介:本资源是一套基于Spring Boot与wechatpay-java官方SDK实现微信支付V3接口对接的完整开发模板,面向Java后端开发者、电商支付模块集成工程师及微服务架构实践者,解决V3版接口文档复杂、签名验签繁琐、证书管理困难等实际接入痛点。压缩包… · 2026/11/3 16:58:54
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46