问题:
第1天给丈母娘1分钱,第2天给2分钱,第3天给4分钱,以此类推,每天给前一天的2倍,给一个月(按30天)算就行。
问:第30天给多少钱,总共给多少钱?
相关热搜关键词:
1天1分钱翻倍累计到三十天后多少钱
1天1分钱第二天乘2
1天1分钱每天翻2倍30天一共多少钱
1天1分钱2天2分钱3天4分钱
1天1分钱2天2分钱,以2倍的倍数,一个月多少钱?
解决方案:
1. 使用while循环方式(不推荐)
一般思维可能就会定义一些变量,然后通过while进行循环,脚本会比较繁琐。这种方法大部分人都能想到,即使是数据库编程初学者,而博主本人也是比较反感while循环这种传统古老落后的编程习惯。这里就不对while循环实现做具体范例和介绍,以免误导大家。
2. 使用power函数和等比数列求和公式(推荐)
2.1 脚本
/* 作者:zhang502219048 脚本来源:https://www.cnblogs.com/zhang502219048/p/11273639.html 功能:通过power函数和等比数列求和公式实现计算1分钱翻倍1个月的问题 */ declare @a1 decimal(18,2) = 0.01, @a30 decimal(18,2), @total decimal(18,2), @q int = 2, @n int = 30 --计算第30个 select @a30 = @a1 * power(@q, @n - 1) --power(@q, @n - 1):使用power函数计算@q的@n - 1次方 print '第30天:' print @a30 --等比数列求和公式 select @total = (@a1 - @a30 * @q)/(1 - @q) print '第1-30天总共:' print @total
2.2 脚本运行结果
3. 使用CTE公用表达式递归方式(推荐)
前面博主已经给大家介绍了怎么应用CTE递归方式编写简洁脚本来生成连续数字或日期(详细见博文:sql server使用公用表表达式CTE通过递归方式编写通用函数自动生成连续数字和日期),今天博主就继续为大家介绍通过CTE递归方式实现计算1分钱翻倍1个月(即:1分钱连续1个月每天翻1倍)的问题。
3.1 脚本
/* 作者:zhang502219048 脚本来源:https://www.cnblogs.com/zhang502219048/p/11273639.html 功能:通过CTE递归方式实现计算1分钱翻倍1个月的问题 字段说明:Day为第几天,Money为当天多少钱,MoneyTotal为截止到Day当天累计多少钱 */ with cte_table(Day, Money, MoneyTotal) as ( select 1, cast(0.01 as decimal(18,2)), cast(0.01 as decimal(18,2)) union all select Day + 1, cast(Money * 2 as decimal(18,2)), cast(MoneyTotal + Money * 2 as decimal(18,2)) from cte_table where Day < 30 ) select * from cte_table
3.2 脚本运行结果
3.3 把运行结果的Money列(对应Excel的A列)和MoneyTotal列(对应Excel的B列)在Excel里面进行数据结果验证
问题结论:
第30天给5,368,709.12元(五百多万)!总共给10,737,418.23元(一千多万)!
总结:
博主在这里就为大家分享了power函数和等比数列求和公式,还有CTE递归脚本,各位朋友可以体会一下这种方式的编程思路和风格,在遇到类似问题的时候可以触类旁通,模仿本方法写出高质量精简脚本实现功能。转载请注明博文来源:https://www.cnblogs.com/zhang502219048/p/11273639.html
- 还没有人评论,欢迎说说您的想法!