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 + 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日晚上结贴。