【C++】【斐波那契】求第几个斐波那契数字。

首先在头文件 whichfibonaccinumber.h 中写了一个使用加法的解法。没有验证输入数字是否小于0。

#ifndef WHICHFIBONACCINUMBER_H_
#define WHICHFIBONACCINUMBER_H_
typedef unsigned long long uint64;
// 简写unsigned long long,因为是64位,写作 uint64(意为:无符号int 64位)
// max == 18446744073709551615,尽量保证不溢出。
// 另有:“通项公式”解法需要开平方。
uint64 whichFibonacciNumber(int number)
{
    if(1 == number || 2 == number)
    {
        return 1;	// 序号是1 和 2 的斐波那契数字是 1,返回1
    }
    else
    {
        uint64 prev = 1;	// 前一个数
        uint64 next = 1;	// 后一个数
        uint64 result = prev + next;	// 最终返回的结果,前两个数相加
        int index = 3;	// 斐波那契数的序号,第3个是2
        while(number != index)	// 检查序号
        {
            prev = next;
            next = result;
            result += prev;	// 以上3行做的是更新数字,以及计算新数
            ++index;	// 新数的序号
        }
        return result;	// 返回结果
    }
}
#endif	// WHICHFIBONACCINUMBER

然后是主程序 main.cpp,使用一个循环持续输入序号。输入序号的验证也在这里做。

#include <iostream>
#include "whichfibonaccinumber.h"
int main()
{
    using std::cout;
    using std::cin;
    using std::endl;
    // unsigned long long --> 8 字节 即64位
    cout << "求第几个斐波那契数: ";
    int index;
    while((cin >> index))
    {
        if(index <= 0)
        {
            cout << "序号不能小于1" << endl;
            continue;
        }
        cout << "第" << index << "个斐波那契数字是:";
        cout << whichFibonacciNumber(index) << endl;
        cout << "继续求第几个斐波那契数字,或输入任意非数字字符退出: ";
    }
    return 0;
}


  感想:疏忽了基础知识,今天做得不够好。对于没有进过培训机构的我,面试单位会更注重考基础。

时间: 2024-12-28 10:01:07

【C++】【斐波那契】求第几个斐波那契数字。的相关文章

python迭代器实现斐波拉契求值

斐波那契数列(Fibonacci sequence),又称黄金分割数列,也称为"兔子数列":F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*).例如 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........这个数列从第3项开始,每一项都等于前两项之和,而且当n趋向于无穷大时,前一项与后一项的

「递归」求第n个斐波纳契数

用「递归」方法求第n个斐波纳契数 1 #include<stdio.h> 2 long int dog(int p) 3 { 4 if(p>1) 5 return dog(p-1)+dog(p-2); 6 else if (p==1||p==0) 7 return 1; 8 } 9 int main() 10 { 11 printf("您要求第几个斐波纳契数:\n"); 12 int n; 13 scanf("%d",&n); 14 pri

斐波那契求第n项

摘自  https://blog.csdn.net/lpjishu/article/details/51323116 斐波那契求第n项是常见的算法题 方法1  递归法 //斐波那契 0,1,1,2,3,5 求n //调用过程像一个二叉树 //f8 会调 f7,f6 f7会调用 f6,f5. 这样f6就重复了 //45之后就很慢了 function getN(n){ if(n <= 0){ return 0; } if(n === 1){ return 1; } return getN(n - 1

[每日编程]求 largest Number - 给出一组非负整数,求这些非负整数可以拼接出的最大数字

英文:Given a list of non negative integers, arrange them such that they form the largest number. 中文:给出一组非负整数,求这些非负整数可以拼接出的最大数字 说明:例如,给出数组 [3, 30, 34, 5, 9],拼接出的最大数字为9534330 正确的排序方法,是使用排序方法进行比较时,比较两个字符串(设为A和B),以先后顺序拼接而成的两个字符串A+B和B+A,如果A+B更大,则A在前B在后,否则A在

数组-07. 求一批整数中出现最多的个位数字

数组-07. 求一批整数中出现最多的个位数字(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 徐镜春(浙江大学) 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字.例如给定3个整数1234.2345.3456,其中出现最多次数的数字是3和4,均出现了3次. 输入格式: 输入在第1行中给出正整数N(<=1000),在第2行中给出N个不超过整型范围的正整数,数字间以空格分隔. 输出格式: 在一行中按格式“M:

数组-07. 求一批整数中出现最多的个位数字(20)

1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int i,n,a[1000],c[10]={0},max=0; 5 cin>>n; 6 for(i=0;i<n;++i) 7 cin>>a[i]; 8 for(i=0;i<n;++i) 9 while(a[i]){ 10 c[a[i]%10]++; 11 a[i]/=10; 12 } 13 for(i=0;i<10;++i) 14

28.求任意一个整数的十位上的数字

#include<iostream> using namespace std; int main() { int i,j,n; cout<<"please input an number :"<<endl; cin>>n; if(n/10<1) { cout<<0; }else { i=n/10; j=i%10; cout<<j; } return 0; } 28.求任意一个整数的十位上的数字

求数组中任意两个数之间所有数字的和

303. Range Sum Query - Immutable   求数组中任意两个数之间所有数字的和 QuestionEditorial Solution My Submissions Total Accepted: 37248 Total Submissions: 146945 Difficulty: Easy Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j),

08-1. 求一批整数中出现最多的个位数字(20)

给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字.例如给定3个整数1234.2345.3456,其中出现最多次数的数字是3和4,均出现了3次. 输入格式: 输入在第1行中给出正整数N(<=1000),在第2行中给出N个不超过整型范围的正整数,数字间以空格分隔. 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n1.n2.……为出现次数最多的个位数字,按从小到大的顺序排列.数字间以空格分隔,但末尾不得有多余空格. 输入样例: 3 1234 2345 3