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 |
晕了,WA都N次了,谁能帮我看看@@#include <stdio.h> #include <malloc.h> #include <string.h> char sign,t[1024],a[501],b[501],c[501]; void add() { int i,j,k,len,lena,lenb; char *s,*pmax,*pmin; lena=strlen(a);lenb=strlen(b); pmax=a;pmin=b; if(lena<lenb) { lena^=lenb; lenb^=lena; lena^=lenb; pmax=b;pmin=a; } s=(char *)malloc(sizeof(char)*(lena+2)); s[0]='0';s[lena+1]='\0'; for(i=lena-1,j=lenb-1,k=lena;j>=0;i--,j--,k--) s[k]=pmax[i]-'0'+pmin[j]; for(;i>=0;i--,k--) s[k]=pmax[i]; for(i=lena;i>0;i--) if(s[i]>'9') { s[i]-=10; s[i-1]++; } len=lena+1; if(s[k]=='0') len=lena; lena=strlen(a);lenb=strlen(b); if((lenb+1)>len) k=1; else k=0; for(i=0;i<len-lena+k;i++) printf(" ");printf("%s\n",a); for(i=0;i<len-lenb-1+k;i++) printf(" ");printf("+%s\n",b); for(i=0;i<len+k;i++) printf("-"); printf("\n"); pmax=s; while(*pmax=='0'&&*pmax!='\0') pmax++; if(*pmax=='\0') pmax--; if(k) printf(" "); printf("%s\n",pmax); free(s); } void subtract() { int i,j,k,flag=0,len,lena,lenb,max_len; char *s,*pmax,*pmin; lena=strlen(a);lenb=strlen(b); pmax=a;pmin=b; if(lena<lenb||(lena==lenb&&strcmp(a,b)<0)) { lena^=lenb; lenb^=lena; lena^=lenb; pmax=b;pmin=a; flag=1; } s=(char *)malloc(sizeof(char)*(lena+1)); s[lena]='\0'; for(i=k=lena-1,j=lenb-1;j>=0;i--,j--,k--) s[k]=pmax[i]-(pmin[j]-'0'); for(;i>=0;i--,k--) s[k]=pmax[i]; for(i=lena-1;i>0;i--) if(s[i]<'0') { s[i]+=10; s[i-1]--; } pmax=s; while(*pmax=='0'&&*pmax!='\0') pmax++; if(*pmax=='\0') { pmax--; *pmax='0'; } len=strlen(pmax); if(lena==lenb) max_len=lena+1; else max_len=lena; if(flag) { len+=1; max_len++; } lena=strlen(a);lenb=strlen(b); for(i=0;i<max_len-lena;i++) printf(" ");printf("%s\n",a); for(i=0;i<max_len-lenb-1;i++) printf(" ");printf("-%s\n",b); for(i=0;i<max_len;i++) printf("-"); printf("\n"); for(i=0;i<max_len-len;i++) printf(" "); if(flag) printf("-"); printf("%s\n",pmax); free(s); } void multiply() { int i,j,k,m,n,len,lena,lenb,max_len,sub_len; long *s,*p,*t[501]; lena=strlen(a);lenb=strlen(b); for(i=0;i<lenb;i++) { t[i]=(long *)malloc(sizeof(long)*(lena+1)); for(j=0;j<lena;j++) t[i][j]=0; } s=(long *)malloc(sizeof(long)*(lena+lenb)); for(i=0;i<lena+lenb;i++) s[i]=0; for(i=0;i<lenb;i++) for(j=0,k=1;j<lena;j++,k++) s[i+j+1]+=(t[i][k]=(b[i]-'0')*(a[j]-'0')); for(i=lena+lenb-1;i>=0;i--) if(s[i]>=10) { s[i-1]+=s[i]/10; s[i]%=10; } for(i=lenb-1;i>=0;i--) for(j=lena;j>=0;j--) if(t[i][j]>=10) { t[i][j-1]+=t[i][j]/10; t[i][j]%=10; } i=0; while(i<lena+lenb&&s[i]==0) i++; if(i==lena+lenb) i--; len=lena+lenb-i; p=&s[i]; max_len=len>lenb+1?len:lenb+1; if(max_len<lena) max_len=lena; for(i=0;i<max_len-lena;i++) printf(" ");printf("%s\n",a); for(j=0;j<max_len-lenb-1;j++) printf(" ");printf("*%s\n",b); n=0; for(i=lenb-1;i>=0;i--) { j=0; while(t[i][j]==0&&j<lena+1) j++; if(j==lena+1) j--; sub_len=lena+1-j; if(i==lenb-1) { k=sub_len>lenb+1?sub_len:lenb+1; for(m=0;m<max_len-k;m++) printf(" "); for(m=0;m<k;m++) printf("-"); printf("\n"); } for(m=0;m<max_len-sub_len-n;m++) printf(" "); while(j<lena+1) printf("%ld",t[i][j++]); printf("\n"); n++; } if(lenb>1) { for(i=0;i<max_len-len;i++) printf(" "); for(i=0;i<len;i++) printf("-"); printf("\n"); for(i=0;i<max_len-len;i++) printf(" "); for(i=0;i<len;i++) printf("%ld",p[i]); printf("\n"); } for(i=0;i<lenb;i++) free(t[i]); free(s); } int main() { int i,j,T; scanf("%d",&T); getchar(); while(T--) { gets(t); i=0; while(t[i]>='0'&&t[i]<='9') a[i]=t[i++]; a[i]='\0'; sign=t[i++]; j=0; while(t[i]!='\0') b[j++]=t[i++]; b[j]='\0'; if(sign=='+') add(); else if(sign=='-') subtract(); else multiply(); 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