二刷斐波那契高精度

#include<bits/stdc++.h>

using namespace std;

struct bign{
    int d[10000];
    int len;
    bign(){
        memset(d,0,sizeof(d));
        len = 0;
    }
};

//字符串转到大数中
bign change(char *s){
    bign a;
    a.len = strlen(s);
    for(int i=0; i<a.len; i++){
        a.d[i] = s[a.len - 1 - i] - ‘0‘;
    }
    return a;
}
//两个大数相加
bign add(bign v1, bign v2){
    bign c;
    int carry = 0;//进位
    for(int i=0; i<v1.len || i<v2.len; i++){
        int temp = v1.d[i] + v2.d[i] + carry;
        c.d[c.len++] = temp % 10;
        carry = temp / 10;
    }
    if(carry != 0){
        c.d[c.len++] = carry;
    }
    return c;
}

int main(){
    int n;
    scanf("%d",&n);
    if(n == 0){
        puts("0");
        return 0;
    }
    if(n == 1){
        puts("1");
        return 0;
    }
    if(n == 2){
        puts("2");
        return 0;
    }
    char s1[10000];
    char s2[10000];
    char s3[10000];
    strcpy(s1,"1");
    strcpy(s2,"2");
    int cnt;
    for(int i=3; i<=n; i++){
        bign v1 = change(s1);
        bign v2 = change(s2);
        bign v3 = add(v1,v2);
        for(int i=v3.len - 1,cnt = 0; i>=0; i--,cnt++){
            s3[cnt] = v3.d[i] + ‘0‘;
        }
        strcpy(s1,s2);
        strcpy(s2,s3);
    }
    puts(s2);
    return 0;
} 

原文地址:https://www.cnblogs.com/zhangqiling/p/12309755.html

时间: 2024-10-18 07:42:09

二刷斐波那契高精度的相关文章

UVA - 10183 - How Many Fibs? (斐波那契 + 高精度)

题目传送:UVA - 10183 思路:高精度就可以了,因为10^100以内的斐波那契数不多,根据公式来看,估计就500多,开个1000的数组足够啦,实现的话是用的java,注意这里的斐波那契是从1开始的,我一开始是从0开始的,wa了一下 AC代码: import java.util.Scanner; import java.math.BigInteger; public class Main { public static void main(String args[]) { Scanner

斐波拉契高精度(洛谷1255)

分析:第n次的台阶数为dp[n],则dp[n]=dp[n-1]+dp[n-2]; 1 // 2 // main.cpp 3 // 1601 4 // 5 // Created by wanghan on 16/10/12. 6 // Copyright © 2016年 wanghan. All rights reserved. 7 // 8 9 #include<cstdio> 10 #include<cstring> 11 #include<vector> 12 #i

js算法集合(二) javascript实现斐波那契数列 (兔子数列) Javascript实现杨辉三角

js算法集合(二)  斐波那契数列.杨辉三角 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列和杨辉三角进行研究,来加深对Javascript的理解. 一.Javascript实现斐波那契数列 ①要用Javascript实现斐波那契数列,我们首先要了解什么是斐波那契数列:斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为

递归与斐波那契数列

一.递归 在函数内部,可以调用其他函数;如果一个函数在内部调用自己,那这个函数就是递归函数. 案例:遍历当前目录下的所有文件 1.递归遍历 1 import os 2 def gci(filepath): 3 #遍历filepath下所有文件,包括子目录 4 files = os.listdir(filepath) 5 for fi in files: 6 fi_d = os.path.join(filepath,fi) 7 if os.path.isdir(fi_d): 8 gci(fi_d)

斐波那契数列以及斐波那契数列的衍生形式 利用矩阵快速幂求解

一.斐波那契数列F[n]=F[n-1]+F[n-2] 可转换为矩阵s[1,1,1,0]的n次幂的矩阵的s[0][1]的值 矩阵的幂次方 可通过 奇判断及进制移位提高时间效率 位与运算 n&1表示的意思:取二进制n的最末位,二进制的最末位为零表示n为哦数,为1表示奇数,即等价于n%2 n>>1 是将n的二进制向右移动一位, n>>=1 即把移动后的值赋给n 题目:求斐波那契数列F[n]%10000(取模) #include <cstdio> #include &l

Tips_of_JS 之 利用JS实现水仙花数的寻找与实现斐波那契数列

一.水仙花数 1.啥是水仙花数? 水仙花数是指一个 n 位正整数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1^3 + 5^3+ 3^3 = 153) 2.利用JS实现对水仙花数的寻找. 这一次我们寻找水仙花数的方法,是JS中非常基础的while循环.代码如下: si不si很神奇~ 二.斐波那契数列 1.啥是斐波那契数列? 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔

算法导论第十九章 斐波那契堆

<算法导论>第二版中在讨论斐波那契堆之前还讨论了二项堆,但是第三版中已经把这块的内容放到思考题中,究极原因我想大概是二项堆只是个引子,目的是为了引出斐波那契堆,便于理解,而且许多经典的算法实现都是基于斐波那契堆,譬如计算最小生成树问题和寻找单源最短路径问题等,此时再把二项堆单独作为一章来讲显然没有必要.类似的堆结构还有很多,如左倾堆,斜堆,二项堆等,下次我打算开一篇博客来记录下它们的异同点. 一.摊还分析(第十七章) 这些高级的数据结构的性能分析一般是基于一个技术——摊还分析,可以理解成一种时

数据结构(六)查找---有序表查找(三种查找方式:折半,插值,斐波拉契查找)

前提 有序表查找要求我们的数据是有序的,是排序好的,我们只需要进行查找即可 我们下面将介绍折半查找(二分查找),插值查找,斐波那契查找 一:折半查找 (一)定义 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列. (二)查找过程 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关

小鑫与斐波那契(二)

小鑫与斐波那契(二) Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 通过题(一),小鑫已经知道斐波那契数列是个什么东西喽~~.于是他要给自己提高难度. 在数学上,斐波纳契数列定义为:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*) 你能帮小鑫算出第n个斐波那契数是多少么? 输入 输入数据为多组,到文件结束. 每组数据为一行一个数n.n<1000000; 输出 对于每组输入,输出一行,为答案.因为数