Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
这个程序有错?我考虑了Fibonacci数列的性质 ,即 11+11 = 1001 可是还是不对。。。。#include <iostream> #include <string.h> int a[45], b[45], c[45], i, j, al, bl, cl,f[46]; char t1[45], t2[45]; void tran(int * a, int &l) { int i; while(a[l--]==0 && l>=1); //消首位的0 l++; for(i = l; i>=2; i--) if(a[i]==1 && a[i-1]==1) //对adjacent 1做转化 { a[i] = 0; a[i-1] =0; a[i+1] = 1; } if(a[l+1] == 1) l++; } void plus(int * a, int * b) { int i, adec = 0, bdec = 0, cdec = 0; f[1]=1; f[2]=2; for(i=3; i<=45; i++) f[i] = f[i-2] + f[i-1]; //确定数列的值 for(i=1; i<=al; i++) //得到a,b,c的十进制值 adec += f[i]*a[i]; for(i=1; i<=bl; i++) bdec += f[i]*b[i]; cdec = adec + bdec; i=1; //得到c的位数 while(cdec>=f[i++]); i -= 2; if(i==0) i = 1; cl = i; for(i=cl; i>=1; i--) //计算 c in the Fibonacci way if(cdec>=f[i]) cdec-=f[i], c[i] = 1; } void print() { int i; for(i=1; i<=cl-al+2; i++) printf(" "); for(i=al; i>=1; i--) printf("%d", a[i]); printf("\n+"); for(i=1; i<=cl-bl+1; i++) printf(" "); for(i=bl; i>=1; i--) printf("%d", b[i]); printf("\n "); for(i=1; i<=cl; i++) printf("-"); printf("\n "); for(i=cl; i>=1; i--) printf("%d", c[i]); printf("\n\n"); } int main() { while(scanf("%s", t1)!=EOF) { scanf("%s", t2); memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); memset(c, 0, sizeof(c)); al = strlen(t1), bl = strlen(t2); for(i=0; i<al; i++) //a,b中放的是倒序 a[al-i] = t1[i]-'0'; for(i=0; i<bl; i++) b[bl-i] = t2[i]-'0'; plus(a, b); tran(a, al); tran(b, bl); tran(c, cl); print(); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator