大数版的斐波那契数列
发布时间:2020-12-26 18:16:28 所属栏目:大数据 来源:网络整理
导读:光棍的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
|
光棍的yyhttp://acm.nyist.net/JudgeOnline/problem.php?pid=655 时间限制:1000?ms ?|? 内存限制:65535?KB 难度:2 输入 第一行输入一个n表示有n个测试数据 输出 输出这种组合种数,占一行 样例输入 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;
}
(编辑:清远站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

