欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

大数加法 + 斐波那契数列

程序员文章站 2024-03-22 13:39:04
...

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;
}


大数加法 + 斐波那契数列

相关标签: 大数加法

上一篇: EC存储原理初探

下一篇: Set