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