首页 > 其他分享 >1143 多少个Fibonacci数

1143 多少个Fibonacci数

时间:2024-07-17 19:55:49浏览次数:8  
标签:1143 string num2 num1 fibs Fibonacci 多少 size

首先,我们需要生成一个Fibonacci数列,直到其值超过10^100。由于Fibonacci数列的性质,我们知道这个数列的长度不会超过500。

然后,对于每一对输入的a和b,我们在生成的Fibonacci数列中查找在a和b之间的数的个数。这可以通过二分查找来实现,因为Fibonacci数列是有序的。

以下是对应的C++代码:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<string> fibs;

// 大数加法
string add(string num1, string num2) {
    string res;
    int i = num1.size() - 1;
    int j = num2.size() - 1;
    int carry = 0;
    while(i >= 0 || j >= 0 || carry != 0) {
        int sum = carry;
        if(i >= 0) sum += num1[i--] - '0';
        if(j >= 0) sum += num2[j--] - '0';
        res += to_string(sum % 10);
        carry = sum / 10;
    }
    reverse(res.begin(), res.end());
    return res;
}

// 大数比较
bool compare(string num1, string num2) {
    if(num1.size() != num2.size()) return num1.size() < num2.size();
    return num1 < num2;
}

// 生成Fibonacci数列
void generateFibonacci() {
    fibs.push_back("1");
    fibs.push_back("2");
    while(true) {
        string fib = add(fibs[fibs.size() - 1], fibs[fibs.size() - 2]);
        if(compare(fib, string(101, '0'))) fibs.push_back(fib);
        else break;
    }
}

int main() {
    generateFibonacci();
    string a, b;
    while(cin >> a >> b) {
        if(a == "0" && b == "0") break;
        int count = upper_bound(fibs.begin(), fibs.end(), b, compare) - lower_bound(fibs.begin(), fibs.end(), a, compare);
        cout << count << endl;
    }
    return 0;
}

这段代码首先生成了一个Fibonacci数列,然后对于每一对输入的a和b,它计算并输出在a和b之间的Fibonacci数的个数。

标签:1143,string,num2,num1,fibs,Fibonacci,多少,size
From: https://blog.csdn.net/huang1xiao1sheng/article/details/140462875

相关文章

  • i5 13490F比13400F性能强多少?13490F和i5 13400F性能对比评测
         英特尔再一次带来了13代全新的中国特供版的小黑盒,即酷睿i5-13490F和i7-13790F这两款型号,这两款CPU相当于i513400F和i713700F升级版,拥有更高的频率和三级缓存,以获得更好的游戏性能。我们知道,i513490F是用作替代上一代i512490F的新一代CPU,那么i513490F比12490F......
  • parallels desktop一年多少钱 parallels desktop有必要买正版吗
    ParallelsDesktop可以使轻松地在Mac上运行成千上万款Windows应用程序,如MicrosoftExcel、Word、Outlook、会计软件、交易软件、SAP、Matlab等。针对最新版Windows11和macOSSonoma进行优化。在Mac虚拟机中跨多个操作系统开发和测试。ParallelsDesktop的价格......
  • 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她
    /有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的......
  • [Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18299911出自【进步*于辰的博客】参考笔记一,P35.4/5。目录1、介绍2、try...with...resources最后1、介绍相信大家对try...catch...finally都很熟悉了,在此我提一点使用细......
  • C#经典面试题:执行string abc=“aaa“+“bbb“+“ccc“共分配了多少内存?
    C#经典面试题:执行stringabc="aaa"+"bbb"+"ccc"共分配了多少内存?这是一个经典的基础知识题目,它涉及了字符串的类型、堆栈和堆的内存分配机制,因此被很多人拿来考核开发者的基础知识功底。首先,我们都知道,判断值类型的标准是查看该类型是否会继承自System.ValueType,通过查看和......
  • 还在困惑需要多少数据吗?来看看这份估计指南 | CVPR 2022
    论文基于实验验证,为数据需求预测这一问题提供了比较有用的建议,详情可以直接看看Conclusion部分。来源:晓飞的算法工程笔记公众号论文:HowMuchMoreDataDoINeed?EstimatingRequirementsforDownstreamTasks论文地址:https://arxiv.org/abs/2207.01725论文代码:http......
  • Day 47 | 1143.最长公共子序列 、 53. 最大子序和
    1143.最长公共子序列体会一下本题和718.最长重复子数组的区别视频讲解:https://www.bilibili.com/video/BV1ye4y1L7CQhttps://programmercarl.com/1143.最长公共子序列.html给定两个字符串text1和text2,返回这两个字符串的最长公共子序列的长度。一个字符串的子序列是......
  • 单片机知多少之STM32F103-GPIO输出应用篇
    示例:选择GPIOB做流水灯控制逻辑将8个发光二极管的负端分别接入PB0~PB7,正端接5V电源,当配置GPIO为低电平时,回路导通,二极管开始工作,亮灯;当配置GPIO为高电平时,回路等电位断开,二极管不工作,灭灯,使GPIO输出按一定顺序执行,即流水灯。编写代码变量定义:GPIO_InitTypeDefGPIO_InitSt......
  • 13元自助餐利润多少
    13元自助餐利润多少  我来答 分享 举报 1个回答#热议# 网上掀起『练心眼子』风潮,真的能提高情商吗?狂犬患者我能治2023-12-16 · TA获得超过3995个赞关注 百分之四十。十三元自助餐的东西都是市场上便宜的,例如鱼丸、豆腐、蔬菜等,真正的肉类少,是大......
  • 八股文 | MySQL 一棵B+树可以存多少数据?
    ......