问题:
第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

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!