nyist 655 光棍的yy(大数问题)
发布时间:2020-12-14 03:36:08 所属栏目:大数据 来源:网络整理
导读:?? 光棍的yy 时间限制: 1000 ? ms ?|? 内存限制: 65535 ? KB 难度: 2 描述 yy经常遇见一个奇怪的事情,每当他看时间的时候总会看见11:11,这个很纠结啊 。 现在给你m个1,你可以把2个1组合成一个2,这样就不是光棍了 ,问这样的组合有多少种?? 例如(11
??
光棍的yy
时间限制:
1000
?ms ?|? 内存限制:
65535
?KB
难度:
2
今天从这个题开始就勾起了我做大数的兴趣(这个词用的不够贴切),这个题先前是看到别人写的大数模板,看起来很不错,就果断点进去学习了一番,然后就一直停不下来了,把大数和大精度都复习了一次~ http://www.voidcn.com/article/p-blcrzyek-gg.html???以后我也就用这个模板啦~ #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("1n"); continue; } else if(s.size()==2) { printf("2n"); 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,sizeof(a)); memset(b,sizeof(b)); memset(c,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 = ",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还是有细节的地方要注意啊,用的还是不太熟练!! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |