|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include <mp.h> ! 3: m_in(a,b,f) MINT *a; FILE *f; ! 4: { MINT x,y,ten; ! 5: int sign,c; ! 6: short qten,qy; ! 7: xfree(a); ! 8: sign=1; ! 9: ten.len=1; ! 10: ten.val= &qten; ! 11: qten=b; ! 12: x.len=0; ! 13: y.len=1; ! 14: y.val= &qy; ! 15: while((c=getc(f))!=EOF) ! 16: switch(c) ! 17: { ! 18: case '\\': getc(f); ! 19: continue; ! 20: case '\t': ! 21: case '\n': a->len *= sign; ! 22: xfree(&x); ! 23: return(0); ! 24: case ' ': ! 25: continue; ! 26: case '-': sign = -sign; ! 27: continue; ! 28: default: if(c>='0' && c<= '9') ! 29: { qy=c-'0'; ! 30: mult(&x,&ten,a); ! 31: madd(a,&y,a); ! 32: move(a,&x); ! 33: continue; ! 34: } ! 35: else ! 36: { VOID ungetc(c,stdin); ! 37: a->len *= sign; ! 38: return(0); ! 39: } ! 40: } ! 41: return(EOF); ! 42: } ! 43: m_out(a,b,f) MINT *a; FILE *f; ! 44: { int sign,xlen,i; ! 45: short r; ! 46: MINT x; ! 47: char *obuf; ! 48: register char *bp; ! 49: sign=1; ! 50: xlen=a->len; ! 51: if(xlen<0) ! 52: { xlen= -xlen; ! 53: sign= -1; ! 54: } ! 55: if(xlen==0) ! 56: { fprintf(f,"0\n"); ! 57: return; ! 58: } ! 59: x.len=xlen; ! 60: x.val=xalloc(xlen,"m_out"); ! 61: for(i=0;i<xlen;i++) x.val[i]=a->val[i]; ! 62: obuf=(char *)malloc(7*xlen); ! 63: bp=obuf+7*xlen-1; ! 64: *bp--=0; ! 65: while(x.len>0) ! 66: { for(i=0;i<10&&x.len>0;i++) ! 67: { sdiv(&x,b,&x,&r); ! 68: *bp--=r+'0'; ! 69: } ! 70: if(x.len>0) *bp--=' '; ! 71: } ! 72: if(sign==-1) *bp--='-'; ! 73: fprintf(f,"%s\n",bp+1); ! 74: free(obuf); ! 75: FREE(x) ! 76: return; ! 77: } ! 78: sdiv(a,n,q,r) MINT *a,*q; short *r; ! 79: { MINT x,y; ! 80: int sign; ! 81: sign=1; ! 82: x.len=a->len; ! 83: x.val=a->val; ! 84: if(n<0) ! 85: { sign= -sign; ! 86: n= -n; ! 87: } ! 88: if(x.len<0) ! 89: { sign = -sign; ! 90: x.len= -x.len; ! 91: } ! 92: s_div(&x,n,&y,r); ! 93: xfree(q); ! 94: q->val=y.val; ! 95: q->len=sign*y.len; ! 96: *r = *r*sign; ! 97: return; ! 98: } ! 99: s_div(a,n,q,r) MINT *a,*q; short *r; ! 100: { int qlen,i; ! 101: long int x; ! 102: short *qval; ! 103: x=0; ! 104: qlen=a->len; ! 105: qval=xalloc(qlen,"s_div"); ! 106: for(i=qlen-1;i>=0;i--) ! 107: { ! 108: x=x*0100000L+a->val[i]; ! 109: qval[i]=x/n; ! 110: x=x%n; ! 111: } ! 112: *r=x; ! 113: if(qval[qlen-1]==0) qlen--; ! 114: q->len=qlen; ! 115: q->val=qval; ! 116: if(qlen==0) shfree(qval); ! 117: return; ! 118: } ! 119: min(a) MINT *a; ! 120: { ! 121: return(m_in(a,10,stdin)); ! 122: } ! 123: omin(a) MINT *a; ! 124: { ! 125: return(m_in(a,8,stdin)); ! 126: } ! 127: mout(a) MINT *a; ! 128: { ! 129: m_out(a,10,stdout); ! 130: } ! 131: omout(a) MINT *a; ! 132: { ! 133: m_out(a,8,stdout); ! 134: } ! 135: fmout(a,f) MINT *a; FILE *f; ! 136: { m_out(a,10,f); ! 137: } ! 138: fmin(a,f) MINT *a; FILE *f; ! 139: { ! 140: return(m_in(a,10,f)); ! 141: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.