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