Fibonacc数列Fn项取余
题目描述
斐波那契数列是一组第一位F1和第二位F2为1,从第三位开始,后一位是前两位和的一组递增数列Fn=Fn-1+Fn-2。 那么当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
如:
输入格式
输入包含一个整数n。
输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。
样例输入10 此时Fibonacc[ ] = {1,1,2,3,5,8,13,21,34,55}
样例输出55
样例输入22 此时Fibonacc[ ] = {1,1,2,3,5,8,13,21,34,55…,10946,17711}
样例输出7704
题目分析
此处使用了动态定义数组方式,将数组实现动态规划长度,使用了malloc
函数,关于malloc
函数可以参照malloc的用法和意义,有关于malloc
的一些详细讲解,在这儿不做过多的解释,简要介绍些动态定义数组长度的方式
malloc函数的使用格式一般为
int len;
int Num = (int)malloc(sizeof(int) * len); //len生成的数组长度,此时Num就是一个为int类型的,可以容纳len个元素的动态数组
注:malloc是按字节数生成的空间大小,不是按照数组长度;动态数组最后要free掉,这点和new生成后要delete的道理一致
代码实现
|
运行结果
10 |
22 |
总结
对于此类斐波拉契数列如果是采用数组方式,则要考虑到数组的长度定义问题,可以给定一个很大范围的数组,这样未来保证数组不会越界,也可以采用
malloc
动态定义数组的长度,为了控制数据类型不会溢出,在此将每一项的的余数存放在数组里面,保证了每一项都小于N
10007
,也控制了数据范围在Int内可以得到