大数加法 + 斐波那契数列

来源:互联网 发布:重庆行知技工学校 编辑:程序博客网 时间:2024/05/21 04:21

Problem Description

度熊面前有一个全是由1构成的字符串,被称为全1序列。你可以合并任意相邻的两个1,从而形成一个新的序列。对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列。

Input
这里包括多组测试数据,每组测试数据包含一个正整数N,代表全1序列的长度。
1≤N≤200

Output
对于每组测试数据,输出一个整数,代表由题目中所给定的全1序列所能形成的新序列的数量。

Sample Input
1
3
5
Sample Output
1
3

8

本来我想以为这是一个求全排列的题目,使用隔板法每次进行分类讨论,后来发现实现不了,最后算了算是个斐波那契,但是前200项的话数字太大,要用大数加法,现学的大数加法模拟,比过去用的简单许多,试了一下到200数字的长度为43,数组开50就够了

#include<stdio.h>int num[201][51];void previous_conduct(){num[0][0]=1;num[1][0]=1;num[2][0]=2;for(int i=3;i<=200;i++){int carry=0;for(int j=0;j<=50;j++){num[i][j]=(num[i-1][j]+num[i-2][j]+carry)%10; //每个地方都记得加上进位carry=(num[i-1][j]+num[i-2][j]+carry)/10;}}}int main(){int n;previous_conduct(); while(scanf("%d",&n)!=EOF){for(int i=50;i>=0;i--){if(num[n][i]!=0){for(int j=i;j>=0;j--){printf("%d",num[n][j]);}printf("\n");break;}}}return 0;}



原创粉丝点击