加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数版的斐波那契数列

发布时间:2020-12-26 01:39:36 所属栏目:大数据 来源:网络整理
导读:光棍的yy http://acm.nyist.net/JudgeOnline/problem.php?pid=655 时间限制:1000?ms ?|? 内存限制:65535?KB 难度:2 输入 第一行输入一个n表示有n个测试数据 以下n行,每行输入m个1 (1 = n,m = 200) 输出 输出这种组合种数,占一行 样例输入 31111122222

光棍的yy

http://acm.nyist.net/JudgeOnline/problem.php?pid=655

时间限制:1000?ms ?|? 内存限制:65535?KB

难度:2

输入

第一行输入一个n表示有n个测试数据
以下n行,每行输入m个1
(1 <= n,m <= 200)

输出

输出这种组合种数,占一行

样例输入

3
11
111
22222

样例输出

2
3
8

描述

yy经常遇见一个奇怪的事情,每当他看时间的时候总会看见11:11,这个很纠结啊

大数版的斐波那契数列

现在给你m个1,你可以把2个1组合成一个2,这样就不是光棍了

大数版的斐波那契数列

,问这样的组合有多少种??

例如(111? 可以拆分为 111 12 21? 有三种)

?

我的代码

#include <stdio.h>
#include <string.h>

#define MAX 210
char res[MAX][MAX] = { 0 };
char s[MAX];
int main(int argc,char *argv[]) {
	int i,j,t,d,T,n;
	//一次处理完毕 
	res[0][0] = res[1][0] = 1;

	for (i = 2; i < MAX; i++) {
		d = 0;
		for (j = 0; j < MAX; j++) {
			t = res[i - 1][j] + res[i - 2][j] + d;
			if (t > 9) {
				d = t / 10;
				res[i][j] = t % 10;
			} else {
				d = 0;
				res[i][j] = t;
			}
		}
	}

	//输出 
	scanf("%d",&T);
	while (T--) {
		scanf("%s",s);
		n = strlen(s);
		for (i = MAX - 1; i > 0 && res[n][i] == 0; i--);
		while (i >= 0)
			printf("%d",res[n][i--]);
		printf("n");
	}


	return 0;
}

?

大数模版

string sum(string s1,string s2)
{
	if(s1.length()<s2.length())
	{
		string temp=s1;
		s1=s2;
		s2=temp;
	}
	int i,j;
	for(i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--)
	{
		s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0));   //注意细节
		if(s1[i]-'0'>=10)
		{
			s1[i]=char((s1[i]-'0')%10+'0');
			if(i) s1[i-1]++;
			else s1='1'+s1;
		}
	}
	return s1;
}

使用模版

#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
string sum(string s1,j--)
	{
		s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0));   //注意细节
		if(s1[i]-'0'>=10)
		{
			s1[i]=char((s1[i]-'0')%10+'0');
			if(i) s1[i-1]++;
			else s1='1'+s1;
		}
	}
	return s1;
}
int main()
{
    int n,T;
    scanf("%d",&T);
    while(T--)
    {
        string s;cin>>s;
        if(s.size()==1){
                printf("1n");continue;
        }
        else if(s.size()==2)
        {
            printf("2n");continue;
        }
        string ans,a="1",b="2";
        for(int i=3;i<=s.size();i++)
        {
            ans=sum(a,b);
            a=b;
            b=ans;
        }
        cout<<b<<endl;
    }
    return 0;
}

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读