zoukankan      html  css  js  c++  java
  • 算法题牛刀小试——Fibonacci数列

    题目

    Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
    当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

    数据规模与约定

    1 <= n <= 1,000,000。

    正确答案

    #include <iostream>
    using namespace std;
    
    int main() {
    	int n = 0;
    	int i = 2;
    	cin >> n;
    	if (n>=1 && n<= 1000000){   //可有可无
    		int now = 1;
    		int last = 1;
    		while(i < n){
    			int temp = now;
    			now += last;
    			now %= 10007;
    			last = temp;
    			++i;
    		}
    		cout<< now;
    	}
    	return 0;
    }
    

    在百度上搜到的很多答案都太复杂了。居然还利用数组?

    反思和易错点

    1.一定要注意输出格式,cout后面不能再跟endl,否则会多输出一行。
    2.注意输入范围,n大于1所以当n=1,n=2时会cout两个1。
    3.本题最关键的地方,在于类型的选择以及数据规模的判断,在本题中,当n>>45时,数据规模会超过int(4字节)的范围,从而让结果变成负数,即使改成了long long,也不足以支撑数据的范围,因此需要在斐波那契数列的数字大于等于10007时,直接取余10007,即使这样也不会影响输出结果(先计算Fn再取余跟每次求Fn之前取余是等效的),而且能够保证Fn<10007,从而将范围控制在10007以内,用int类型足以存储。

  • 相关阅读:
    某地理位置模拟APP从壳流程分析到破解
    GDB多线程调试分析
    ARM平台指令虚拟化初探
    爱加密企业版静态脱壳机编写
    APK加固之静态脱壳机编写入门
    APK加固之类抽取分析与修复
    Xposed截获 Android手机QQ密码
    菜鸟 学注册机编写之 Android app
    Pstools使用
    msf端口扫描
  • 原文地址:https://www.cnblogs.com/trytoreachpeak/p/13286283.html
Copyright © 2011-2022 走看看