求大数运算c语言代码

求大数运算c语言代码

#include

#define MAXSIZE 16

typedef struct{

int data[MAXSIZE];

int top;

int base;

}seqstack;

void InitStack(seqstack *s);

int Empty(seqstack *s);

void Push(seqstack *s, int x );

int Pop(seqstack *s);

int GetTop(seqstack *s);

int Operate(int a,char r,int b);

char Proceed(char op ,char c);

int In(char );

int EvalExpres(void);

seqstack StackR,StackD;

int main()

{

int v;

char ch;

v = EvalExpres();

printf("The result is:%d",v);

getch();

}

void InitStack(seqstack *s)

{ s->top = 0;

s->base = 0;

}

int Empty(seqstack *s)

{ if(s->top == s->base)

return 1;

else

return 0;

}

void Push(seqstack *s, int x)

{

if(s->top == MAXSIZE)

{ printf("OVER FLOW!\n");

exit(0);

}

else

{ s->data[s->top] = x;

s->top++;

}

}

int Pop(seqstack *s)

{ int e;

if(Empty(s))

{ printf("Under flow!\n");

return 0;

}

else

{ s->top--;

e = s->data[s->top];

return e;

}

}

int GetTop(seqstack *s)

{

if(Empty(s))

{ printf("Under flow!\n");

return 0;

}

else

return s->data[s->top-1];

}

int EvalExpres(void)

{

int a,b,i=0,s=0;

char c,r;

InitStack(&StackR);

Push(&StackR,'#');

InitStack(&StackD);

printf("Please enter a expression end with '#': ");

gets(c);

while(c[i]!='#' || GetTop(&StackR)!='#')

{

if(!In(c[i]))

{ if(c[i] >= '0' && c[i] <= '9')

{

s += c[i]-'0';

while(!In(c[++i]))

{ s*=10;

s += c[i]-'0';

}

Push(&StackD,s+'0');

s = 0;

}

}

else

switch(Proceed(GetTop(&StackR),c[i]))

{

case '<':

Push(&StackR,c[i]);

i++;

break;

case '=':

Pop(&StackR);

i++;

break;

case '>':

r = Pop(&StackR);

a = Pop(&StackD)-'0';

b = Pop(&StackD)-'0';

Push(&StackD,Operate(a,r,b)) ;

break;

}

}

return (GetTop(&StackD)-'0');

}

int In(char c)

{

char ch={'+','-','*','/','%','#','(',')'};

int i;

for(i = 0; i < 8; i++)

if(c == ch[i])

return 1;

return 0;

}

char Proceed(char op,char c)

{

char ch;

if(op=='(' && c==')' || op=='#' && c=='#' )

ch = '=';

else

if(op=='+' || op=='-')

switch(c)

{

case '+':

case '-':

case ')':

case '#': ch = '>'; break;

case '*':

case '/':

case '%':

case '(': ch = '<';

}

else

if(op=='*' || op=='/'|| op=='%')

switch(c)

{

case '+':

case '-':

case '*':

case '/':

case '%':

case ')':

case '#': ch = '>'; break;

case '(': ch = '<';

}

else

if(op=='(')

switch(c)

{

case '+':

case '-':

case '*':

case '/':

case '%':

case '(': ch = '<'; break;

case '#': printf("Error!\n"); exit(0);

}

else

if(op==')')

switch(c)

{

case '+':

case '-':

case '*':

case '/':

case '%':

case '#': ch = '>'; break;

case '(': printf("Error!\n"); exit(0);

}

else

if(op=='#')

switch(c)

{

case '+':

case '-':

case '*':

case '/':

case '%':

case '(': ch = '<'; break;

case ')': printf("Error!\n"); exit(0);

}

return ch;

}

int Operate(int a,char r,int b)

{

int s;

int d1 = a;

int d2 = b;

switch(r)

{

case '+': s = d1+d2; break;

case '-': s = d2-d1; break;

case '*': s = d1*d2; break;

case '/': s = d2/d1; break;

case '%': s = d2%d1; break;

}

return (s+'0');

}

那ACM小组内部预定函数里面有的是,你自己去下载下来看吧。