http://acm.nyist.net/JudgeOnline/problem.php?pid=655
光棍的yy
时间限制:1000 ms | 内存限制:65535 KB
难度:2
描述
yy经常遇见一个奇怪的事情,每当他看时间的时候总会看见11:11,这个很纠结啊。
现在给你m个1,你可以把2个1组合成一个2,这样就不是光棍了,问这样的组合有多少种??
例如(111 可以拆分为 111 12 21 有三种)
输入
第一行输入一个n表示有n个测试数据
以下n行,每行输入m个1
(1 <= n,m <= 200)
输出
输出这种组合种数,占一行
样例输入
3
11
111
11111样例输出
2
3
8来源
hdu
上传者
yangyin1217
*///大数问题
#include<stdio.h>//计算菲波那切数列:1,2,3,5,8,13,21,34、、、、、
#include<string.h>//大数
char a[210],b1[210],b2[210],e[210];//=======AC=========
int main(){
int str,i,n,j,s,c;//第200个数:453973694165307953197296969697410619233826 (有39位);
scanf("%d",&n);
while(n--){
// scanf("%s",a);
memset(b1,'0',sizeof(b1));
memset(b2,'0',sizeof(b2));
b2[0]='1';
//str=strlen(a);
for(j=0;j<200;j++)
{
strcpy(e,b2);
for(i=0,c=0;i<=209;i++)
{
s=(b1[i]+b2[i]-'0'-'0')+c;
b2[i]=s%10+'0';
c=s/10;
}
strcpy(b1,e);
}
for(i=209;i>=0;i--){
if(b2[i]!='0')
{ for(j=i;j>=0;j--)
printf("%c",b2[j]);
break;
}
}
printf("\n");
}
return 0;
}
// 其他AC代码
#include<stdio.h>
#include<string.h>
int main()
{
int fab[201][50];
memset(fab, 0, sizeof(fab));
int i, j, k=0;
fab[1][0]=1;
fab[2][0]=2;
fab[3][0]=3;
for(i=4; i<=200; i++)
{
for(j=0; j<=k; j++)
{
fab[i][j]+=(fab[i-1][j] + fab[i-2][j]);
if(fab[i][j]>10000)
{
fab[i][j+1]=fab[i][j]/10000;
if(k<j+1) k=j+1;
fab[i][j]-=10000;
}
}
}
char str[220];
int n, l;
scanf("%d", &n);
while(n--)
{
scanf("%s",str);
l=strlen(str);
for(i=48; i>=0; i--)
if(fab[l][i]!=0 && fab[l][i+1]==0)
{
printf("%d", fab[l][i]);
for(j=i-1; j>=0; j--)
printf("%4.4d",fab[l][j]);
break;
}
printf("\n");
}
return 0;
}