yy经常遇见一个奇怪的事情,每当他看时间的时候总会看见11:11,这个很纠结啊。
现在给你m个1,你可以把2个1组合成一个2,这样就不是光棍了,问这样的组合有多少种??
例如(111 可以拆分为 111 12 21 有三种)
3 11 111 11111
2 3 8
今天从这个题开始就勾起了我做大数的兴趣(这个词用的不够贴切),这个题先前是看到别人写的大数模板,看起来很不错,就果断点进去学习了一番,然后就一直停不下来了,把大数和大精度都复习了一次~
http://blog.csdn.net/y990041769/article/details/19545179 以后我也就用这个模板啦~
#include <cstdio> #include <iostream> #include <string> using namespace std; string sum(string a,string b) { if(a.length()<b.length()) { string temp=a; a=b; b=temp; } int i,j; for(i=a.length()-1,j=b.length()-1;i>=0;i--,j--) { a[i]=char(a[i]+(j>=0?b[j]-'0':0));//这里写的比较巧妙~值得学习 if(a[i]-'0'>=10) { a[i]=char((a[i]-'0')%10+'0'); if(i) a[i-1]++; else a='1'+a; } } return a; } int main() { int n; scanf("%d",&n); while(n--) { string s; cin>>s; if(s.size()==1) { printf("1\n"); continue; } else if(s.size()==2) { printf("2\n"); continue; } string temp,a,b; a="1",b="2"; for(int i=3;i<=s.size();i++) { temp=sum(a,b); a=b; b=temp; } cout<<b<<endl; } return 0; }
明天在用java写一次吧~,感觉java在这类问题上真的很方便~
以前自己写的算是加法的一个模板吧
#include<stdio.h> #include<string.h> int main() { int t,i,j,a[1001],b[1001],c[1001],lenth1,lenth2,n,m=1; char s1[1001],s2[1001]; scanf("%d",&t); while(t--) { n=0; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); scanf("%s%s",s1,s2); lenth1=strlen(s1); lenth2=strlen(s2); n=(lenth1>lenth2)?lenth1:lenth2; for(j=0,i=lenth1-1;i>=0;i--) a[j++]=s1[i]-'0'; for(j=0,i=lenth2-1;i>=0;i--) b[j++]=s2[i]-'0'; for(i=0;i<n;i++) { c[i]+=a[i]+b[i]; if(c[i]>=10)//进位 { c[i+1]=c[i]/10; c[i]%=10; } } printf("Case %d:\n",m++); printf("%s + %s = ",s1,s2); while(n>=0 && !c[n]) n--; //去前导零 while(n>=0) printf("%d", c[n--]); //输出 printf("\n"); } return 0; }
真的感觉写的好戳啊!!! 写代码能力还有待加强啊!!
还要用java把这道题做一下~(未完)
下面附上java的代码~;
import java.math.BigInteger; import java.util.Scanner; public class nyist655 { public static void main(String[] args) { Scanner cin=new Scanner(System.in); int n=cin.nextInt(); BigInteger m[]=new BigInteger[200]; m[0]=new BigInteger("1"); m[1]=new BigInteger("2"); for(int i=2;i<m.length;i++) m[i]=m[i-1].add(m[i-2]); while(n-->0) { String s=cin.next(); System.out.println(m[s.length()-1]); } } }java还是有细节的地方要注意啊,用的还是不太熟练!!