首先在头文件 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-10-18 03:38:44