你知道吗?我第一次看到“365×99”这个算式的时候,脑子里的第一反应是——掏出手机计算器,但后来我发现,原来这道题有个特别巧妙的简便算法,而且用 Golang 写个视频讲解程序,能让算法原理变得特别直观。
为什么365×99需要简便算法?
先想想,99接近但又不是100,如果你直接算365×99,常规笔算是:

365
× 99
-------
3285
3285
-------
36135
这个计算过程本身没什么问题,但要是放在考试里,你写上这么一大串,万一哪一步进位算错了,那就前功尽弃了。—说实话,谁喜欢一堆计算步骤挤在一起的感觉呢?
核心算法:把99换成(100-1)
这里用到了一个小学三年级就学过的知识:乘法分配律。
365×99 = 365×(100-1) = 365×100 - 365×1
看到没?这道原来看着挺麻烦的两位数乘法,瞬间变成了口算题:
- 365×100 = 36500 (就加两个0嘛)
- 365×1 = 365
- 36500 - 365 = 36135
答案一模一样,但算起来快多了。
这个算法有个关键点:你要习惯把99、98、101、102这类数字看成“整百±几”,比如98就是100-2,101就是100+1,一旦有了这个意识,很多计算都能秒出答案。
用Golang写一个视频讲解程序
光说理论不够过瘾,我们来写个 Golang程序,把这个算法编成一段可展示的“视频讲解”效果——别紧张,这不是让你真的去做视频,而是通过终端输出模拟一步一步的讲解过程。
上代码,我把每一步都加了注释,你直接能运行看看效果:
package main
import (
"fmt"
"time"
)
func main() {
// 第一步:出题
fmt.Println("📐 365×99 简便算法视频讲解")
fmt.Println("题目:365 × 99 = ?")
time.Sleep(2 * time.Second)
// 第二步:展示思路
fmt.Println("\n💡 关键思路:把 99 变成 (100-1)")
time.Sleep(2 * time.Second)
// 第三步:应用乘法分配律
fmt.Println("\n✨ 根据乘法分配律:")
fmt.Println(" 365 × 99 = 365 × (100 - 1)")
fmt.Println(" = 365 × 100 - 365 × 1")
time.Sleep(2 * time.Second)
// 第四步:计算结果
fmt.Println("\n🔢 分步骤计算:")
part1 := 365 * 100
fmt.Printf(" 365 × 100 = %d\n", part1)
time.Sleep(1 * time.Second)
part2 := 365 * 1
fmt.Printf(" 365 × 1 = %d\n", part2)
time.Sleep(1 * time.Second)
// 第五步:得出最终答案
answer := part1 - part2
fmt.Printf("\n🎉 最终答案:%d - %d = %d\n", part1, part2, answer)
// 第六步:验证
fmt.Println("\n✅ 验证:用普通方法再算一次")
result := 365 * 99
fmt.Printf(" 365 × 99 = %d\n", result)
if result == answer {
fmt.Println("✔️ 两种方法结果一致,算对了!")
} else {
fmt.Println("❌ 哎呀,出错了?")
}
}
运行这段代码,终端就会像一帧一帧的动画一样,把计算过程展示出来,每两秒跳一步,很像视频里的“慢动作回放”。
除了99,还有哪些数字能用这个技巧?
我整理了一个小表格,方便你对照着看:
| 原始算式 | 变形方式 | 简便算式 | 思路解释 |
|---|---|---|---|
| 365×99 | 99 = 100-1 | 365×100 - 365×1 | 减一个数 |
| 365×98 | 98 = 100-2 | 365×100 - 365×2 | 减两个数 |
| 365×101 | 101 = 100+1 | 365×100 + 365×1 | 加一个数 |
| 365×102 | 102 = 100+2 | 365×100 + 365×2 | 加两个数 |
| 365×97 | 97 = 100-3 | 365×100 - 365×3 | 减三个数 |
| 365×103 | 103 = 100+3 | 365×100 + 365×3 | 加三个数 |
你看,只要原数离100越近,这个方法越省事儿,甚至你还能把它推广到更复杂的场景,
- 365×199 = 365×(200-1) = 73000-365 = 72635
- 365×999 = 365×(1000-1) = 365000-365 = 364635
用费曼教学法检验一下
费曼老爷子说过:“如果你不能简单地解释它,你就没有真正理解它。”
那我现在来试试,用小孩能懂的话解释365×99的算法:
“你想啊,365个99块的红包加起来多少钱?直接算好麻烦哦,但我们知道99块其实就是100块少1块嘛,那我们就先给每个红包里塞100块,一共365个,就是36500块,但每个红包里我们多塞了1块,所以我们得把多塞的365块拿出来,剩下就是36135块啦。”
是不是特别生活化?你要是能用这种唠叨话把算法讲出来,那就说明你真正明白了。
讲个真实的小故事:我第一次自己悟出这个算法,是在超市结账排队的时候,前面的阿姨买了99包泡面(我猜她是开小卖部的),收银员报了个总数,我站在后面,默默算了一遍 单价×99,结果和收银小票一模一样,那一刻的感觉贼爽,算法不只有用,它还能让平常的生活多出一点小确幸。
给Golang代码加点“视频讲解”的感觉
刚才那个程序已经能在终端里做逐步讲解了,但如果你想让它更有视频感,还可以加点料——比如用 fmt.Printf 控制输出位置,或者用 \r 回车符实现同一行更新数字的效果。
我加一个 高级版本 的片段:
// 模拟视频进度条
for i := 0; i <= 100; i += 10 {
fmt.Printf("\r⏳ 讲解进度:%d%%", i)
time.Sleep(500 * time.Millisecond)
}
fmt.Println("\n🎬 视频开始播放...")
这个小进度条会让你的“视频”显得更专业,虽然它只是在终端里跑,但配合之前的逐步输出,真的有种在看教学视频的感觉。
还有一个小建议:你可以在代码里 加入声音提示(比如用 \a 控制字符让终端哔一声),在每一步完成时响一下,这样用户就算不看屏幕,也能知道进度。
不过需要注意,不同操作系统的终端对 \a 支持不一样,Windows里可能没声音,Linux和macOS一般没问题,这是个挺现实的坑,我遇到过好几次。
365×99这个算法的底层逻辑
其实不只是乘99,这个算法的底层逻辑就是 乘法分配律 和 凑整思想。
乘法分配律的公式是:a×(b+c) = a×b + a×c,而我们用的是它的变体:a×(b-c) = a×b - a×c。
凑整思想呢,就是让计算尽可能往整十、整百、整千去靠,因为人类(包括计算机)处理整数的速度远比处理非整数快,不信你试试这个Golang的小对比:
start := time.Now()
for i := 0; i < 1000000; i++ {
_ = 365 * 99
}
fmt.Println("直接乘耗时:", time.Since(start))
start = time.Now()
for i := 0; i < 1000000; i++ {
_ = 365*100 - 365
}
fmt.Println("简便算法耗时:", time.Since(start))
虽然差距微乎其微(现代CPU乘法已经很快了),但它展示了 算法优化的核心思想:用更少的、更快的操作,替代更多的、更慢的操作。
怎么把这个“视频讲解”分享给别人
你完全可以把上面的Golang代码打包成可执行文件,发给朋友或者学生,对方不用装Go环境,双击(或命令行运行)就能看到那个“视频讲解”。
在Go里打包很简单:
# 在Windows上打包成exe GOOS=windows GOARCH=amd64 go build -o 365x99_video.exe main.go # 在Mac上打包 GOOS=darwin GOARCH=amd64 go build -o 365x99_video main.go # 在Linux上打包 GOOS=linux GOARCH=amd64 go build -o 365x99_video main.go
这样你就能在不同平台上运行了,如果你想让讲解更生动,还可以把输出内容改成中文加一点 emoji,就像我之前代码里那样,小孩子看到 🎉 和 ✅ 会很开心的。
我还试过把输出内容改成带颜色的(用 ANSI 转义码),比如关键数字用红色,公式用绿色,效果确实不错,但有个问题:不是所有的终端都支持彩色输出,比如在Windows的旧版CMD里,颜色显示会变成乱码,所以我一般只在确认终端支持的情况下才加颜色。
看完这个,我觉得你也能写出来
其实写这样一个“视频讲解”程序,你不需要懂特别多Go语言知识,就用 fmt 打印、time.Sleep 控制节奏、再加点带颜色的文本,一个教学视频就出来了。
我甚至还用它来教过邻居家的小孩——当然不是直接甩给他代码,而是把每一步的公式和数字都打印出来,让他看着终端跟着念,那孩子学得可快了,后来他自己还会反过来教他妈妈。
你知道吗?人类学习有一个特点:视觉 + 听觉 + 动手三种渠道同时使用,记忆效果最好,我们这个程序其实只占了视觉和一点点节奏感(听觉是脑补的),但已经比单纯的文字公式要强很多了,如果再配合你拿着电脑跟他一起念,那就更完美。
我刚接触Go的时候,就是想做这种“看得见效果的”小项目才学的,写一百行hello world不如写十行能跑出实际结果的程序,365×99的算法只是一个引子,更重要的是你能体验到:把数学和代码结合,能产生什么样的化学反应。
有时候我在想,也许以后真的可以用Go写一个全自动的教学视频生成器,输入一个数学公式,程序自动把每一步拆解、配上颜色、加上解释文字,最后输出一个能跑的视频脚本,听起来有点疯狂,但以现在的技术,感觉也不是完全不可能。
本文来自作者[kyadmin]投稿,不代表be365立场,如若转载,请注明出处:http://www.uss1.cn/keji/873.html
评论列表(4条)
我是be365的签约作者“kyadmin”!
希望本篇文章《365×99的简便算法,用Golang写个视频讲解,连小学生都能看懂》能对你有所帮助!
本站[be365]内容主要涵盖:be365,be365网站,be365网址,ball365体育,Be365排名
本文概览:你知道吗?我第一次看到“365×99”这个算式的时候,脑子里的第一反应是——掏出手机计算器,但后来我发现,原来这道题有个特别巧妙的简便算...