当前位置: 首页 > news >正文

算法分析与设计课堂实验(5 分支策略3

问题描述】

在Fibonacci数列中,

。例如,Fibonacci数列的前十项是:

0,1,1,2,3,5,8,13,21,34,…

Fibonacci序列的另一个公式是

给定一个整数

,请你计算

在10进制表示下的最后四位。

【输入形式】

输入将包含一个测试用例。每个测试用例仅有一行,包含一个整数

(其中

)。

【输出形式】

对于每个测试用例,输出

的最后四位数字。如果

的最后四位都是零,则输出

;否则,省略任何前导零(即,输出

)。

【样例输入】

0
【样例输出】

0
样例输入】

9
【样例输出】

34

#include <iostream>
#include <string>
using namespace std;
 
const int MOD = 10000;
 
pair<int, int> fast_doubling(int n) {
    if (n == 0) {
        return {0, 1};
    }
    auto [a, b] = fast_doubling(n >> 1);
    int c = (a * (( (2 * b - a) % MOD + MOD ) % MOD )) % MOD;
    int d = ( (a * a % MOD) + (b * b % MOD) ) % MOD;
    if (n & 1) {
        return {d % MOD, (c + d) % MOD};
    } else {
        return {c % MOD, d % MOD};
    }
}
 
int main() {
    int n;
    cin >> n;
    if (n == 0) {
        cout << 0 << endl;
        return 0;
    }
    auto [fib_n, fib_n1] = fast_doubling(n);
    int res = fib_n;
    char buffer[5];
    sprintf(buffer, "%04d", res);
    string s(buffer);
    size_t start = s.find_first_not_of('0');
    if (start == string::npos) {
        cout << 0 << endl;
    } else {
        cout << s.substr(start) << endl;
    }
    return 0;
}

相关文章:

  • STM32 MODBUS-RTU主从站库移植
  • 【Linux】——进程(下)
  • 【商城实战(65)】退换货流程全解析:从前端到后端的技术实现
  • HTML5 SVG:图形绘制的现代标准
  • STL之string
  • Qt的文件操作
  • Linux <(...) 进程替换
  • 【STM32】编写程序控制开发板的RGB LED灯
  • STM32单片机uCOS-Ⅲ系统12 CPU利用率与堆栈检测
  • [plugin:vite:import-analysis] Cannot find module ‘vuex\dist\vuex.esm-bundler
  • 风光互补智慧路灯的灯杆设计有哪些要求?
  • 服务器数据恢复—Raid5热备盘同步中断的数据恢复案例
  • WinSCP使用教程:(SFTP、SCP、FTP 和 WebDAV)
  • CES Asia 2025:科技企业出海的领航灯塔
  • 如何使用VS中的Android Game Development Extension (AGDE) 来查看安卓 Logcat 日志
  • 数据库 第一章 MySql基础(2)
  • STL之map和set
  • Altium Designer——PCB设计(走线与布局前的准备)
  • WebWorkers在项目中的使用案例
  • 状态模式(State Pattern)
  • 指挥家高健:东方市民音乐会“高贵不贵”,我愿意常来
  • 预告:央行等部门将发声,介绍“一揽子金融政策支持稳市场稳预期”有关情况
  • 中东睿评|胡塞武装已成为楔入中东各方力量之间的钉子户
  • 全国铁路迎来返程客流高峰,预计今日发送2040万人次
  • 四人自驾游宣恩因酒店爆满无处住宿,求助文旅局后住进局长家
  • 香港金紫荆广场举行五四升旗礼