有 一道清华复试上机题 引发的思考,持续更新中……

Microsoft、CSIL、Hisoft,必须algorithm。从现在开始,步入算法和逻辑思维的研究大军中。

 

数的分解 :任何数都能分解成2的幂,比如
7=1+1+1+1+1+1+1
=1+1+1+1+1+2
=1+1+1+2+2
=1+2+2+2
=1+1+1+4
=1+2+4
求任意整数 n(n<100亿)的此类划分数

 

计算f(2m)=f(0)+f(1)+...+f(m)

现有递推公式:f(2m + 1) = f(2m)
       f(2m) = f(2m - 2) + f(m)
初始条件:   f(0) = f(1) = 1
易知:f(2m) = f(0) + f(1) + ... + f(m)
要求:写一个 C#或C++程序,对任意输入的n(0≤n<100亿),计算f(n)。
对于较大的n,f(n)会超出UInt64所能表示的范围,结果 可以存储为BigInteger。
参考:http://www.cnblogs.com/skyivben/archive/2008/07/25/1251697.html
以 及:http://www.cnblogs.com/skyivben/archive/2008/07/13/1241681.html

可 以利用递推公式写一个递归的程序,对于很大的n,程序有可能无法完成计算(来源贴13楼)。
可以计算 f(0) + f(1) + ... + f(m),对于很大的n,存储空间可能不够(来源贴30楼)。
核心提示: 该问题已在129楼由litaoye 完美解决。125楼mathe 也 给出了很好的思路。31日晚上结贴。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值