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 |
很怪异的一件事情我的代码在zoj上可以过(题目是2017),但是在这里就过不了,很诡异呀。 代码如下: #include <iostream> //#include <string> #include <stdio.h> using namespace std; const int MAX=1020; const int MAP=510; int tmp[MAP]; int bi[MAX]; void substract(int a[],int b[]) { int i; for(i=0; i<MAP; i++) a[i]=a[i]-b[i]; for(i=0; i<MAP-1; i++) if(a[i]<0) { a[i+1]--; a[i]=10+a[i]; } } void add(int a[],int b[]) { int i; for(i=0; i<MAP; i++) b[i]=a[i]+b[i]; for(i=0; i<MAP-1; i++) { b[i+1]+=b[i]/10; b[i]=b[i]%10; } } void mulp(int a[],int b[],int lena,int lenb) { int i,j; for(i=0;i<lenb;i++) { for(j=0;j<lena;j++) { bi[i+j]+=a[j]*b[i]; } } for(i=0;i<MAX-1;i++) { bi[i+1]+=bi[i]/10; bi[i]%=10; } } int main() { int i,j; int n; int a[MAP],b[MAP]; char st[MAX]; scanf("%d",&n); for(i=0; i<n; i++) { scanf("%s",st); int len=strlen(st); for(j=0; j<len; j++) if(st[j]=='+' || st[j]=='-' || st[j]=='*') break; int operpos=j; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); int lena=operpos; int lenb=len-(operpos+1); for(j=0; j<lena; j++) a[lena-1-j]=st[j]-'0'; for(j=operpos+1; j<len; j++) b[(lenb-1)-(j-(operpos+1))]=st[j]-'0'; if(st[operpos]=='-') { substract(a,b); for(j=MAP-1;j>=0;j--) if(a[j]!=0) break; int nlena=j+1; int newlena; if(j<0) newlena=1; else newlena=nlena; int qb=(nlena>(lenb+1))?nlena:(lenb+1); nlena=(lena>(lenb+1))?lena:(lenb+1); for(j=0;j<nlena-lena;j++) printf(" "); for(j=0; j<operpos; j++) printf("%c",st[j]); printf("\n"); for(j=0;j<nlena-(lenb+1); j++) printf(" "); printf("-"); for(j=operpos+1; j<len; j++) printf("%c",st[j]); printf("\n"); for(j=0;j<nlena-qb;j++) printf(" "); for(j=0;j<qb;j++) printf("-"); printf("\n"); for(j=0;j<nlena-newlena;j++) printf(" "); for(j=newlena-1;j>=0;j--) printf("%d",a[j]); cout<<endl; } else if(st[operpos]=='+') { add(a,b); for(j=MAP-1; j>=0; j--) if(b[j]!=0) break; int lenbn=j+1; int newlenb; if(j<0) newlenb=1; else newlenb=lenbn; int dade=(lena>(lenb+1))?lena:(lenb+1); dade=(dade>lenbn)?dade:lenbn; for(j=0; j<dade-lena; j++) printf(" "); for(j=0; j<operpos; j++) printf("%c",st[j]); printf("\n"); //cout<<endl; for(j=0; j<dade-(lenb+1); j++) printf(" "); printf("+"); for(j=operpos+1; j<len; j++) printf("%c",st[j]); printf("\n"); for(j=0; j<dade; j++) printf("-"); printf("\n"); for(j=0; j<dade-newlenb; j++) printf(" "); for(j=newlenb-1; j>=0; j--) printf("%d",b[j]); printf("\n"); } else { memset(bi,0,sizeof(bi)); mulp(a,b,lena,lenb); for(j=MAX-1; j>=0; j--) if(bi[j]!=0) break; int lenlast; int lenf; if(j<0) lenlast=1; else lenlast=j+1; lenf=lenlast; int big=(lena>(lenb+1))?lena:(lenb+1); lenlast=(lenlast>big)?lenlast:big; for(j=0; j<lenlast-lena; j++) printf(" "); for(j=0; j<operpos; j++) printf("%c",st[j]); printf("\n"); for(j=0; j<lenlast-(lenb+1); j++) printf(" "); printf("*"); for(j=operpos+1; j<len; j++) printf("%c",st[j]); printf("\n"); memset(tmp,0,sizeof(tmp)); for(j=0;j<lena;j++) tmp[j]=a[j]*b[0]; for(j=0;j<MAP-1;j++) { tmp[j+1]+=tmp[j]/10; tmp[j]%=10; } for(j=MAP-1; j>=0; j--) if(tmp[j]!=0) break; int qm; if(j>=0) { qm=j+1; big=((lenb+1)>qm)?(lenb+1):qm; } else { qm=1; big=((lenb+1)>qm)?(lenb+1):qm; } if(lenb>1) { for(j=0; j<lenlast-big; j++) printf(" "); for(j=0; j<big; j++) printf("-"); printf("\n"); } else { int mb=(lenf>(lenb+1))?lenf:(lenb+1); for(j=0;j<lenlast-mb;j++) cout<<" "; for(j=0; j<mb; j++) printf("-"); printf("\n"); } int wx; int bf,k; if(lenb>=2) { for(j=0; j<lenb; j++) { memset(tmp,0,sizeof(tmp)); for(k=0;k<lena;k++) tmp[k]=a[k]*b[j]; for(k=0;k<MAP-1;k++) { tmp[k+1]+=tmp[k]/10; tmp[k]%=10; } for(k=MAP-1; k>=0; k--) if(tmp[k]!=0) break; if(k<0) wx=lenlast-j-1; else wx=lenlast-j-(k+1); if(j==lenb-1) bf=lenlast-wx; int p; for(p=0; p<wx; p++) cout<<" "; if(k<0) cout<<"0"; else { for(p=k; p>=0; p--) cout<<tmp[p]; } cout<<endl; } bf=(bf>lenf)?bf:lenf; for(j=0; j<lenlast-bf; j++) cout<<" "; for(j=0; j<bf; j++) cout<<"-"; cout<<endl; } for(j=0; j<lenlast-lenf; j++) printf(" "); for(j=lenf-1; j>=0; j--) printf("%d",bi[j]); printf("\n"); } printf("\n"); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator