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,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,sizeof(fab)); int i,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; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。