#include #define MAX_CHAR 1024 int calc(char* data,int size); int main() { char *tp=0; try{ tp = new char[MAX_CHAR]; int i; for(i=0;i 0){ rt = 0; if(*data == '+'){ data++;size--;rts++; val += cal_md(data,size,rt); }else if(*data == '-'){ data++;size--;rts++; val -= cal_md(data,size,rt); }else return val; data += rts; size -= rts; rts += rt; } if(mn == true) return -val; return val; } int cal_md(char* data,int size,int &rts) { if(data == 0 || size < 1) return 0; int val,rt=0; rts = 0; val = cal_c(data,size,rt); data += rt; size -= rt; rts += rt; while(size > 0){ rt = 0; if(*data == '*'){ data++;size--;rts++; val = val*cal_c(data,size,rt); }else if(*data == '/'){ data++;size--;rts++; val = val/cal_c(data,size,rt); }else if(*data == '%'){ data++;size--;rts++; val = val%cal_c(data,size,rt); }else return val; data += rt; size -= rt; rts+=rt; } return val; } int cal_c(char* data,int size,int &rts) { if(data == 0 || size < 1) return 0; int val=0,rt=0; rts = 0; if(*data == '('){ data ++;size--;rts++; val = cal_pm(data,size,rt); data += rt; size -= rt; rts += rt; if(size < 1) throw 0; if(*data != ')') throw 0; data++;size--;rts++; }else{ val = cal_int(data,size,rt); rts += rt; } return val; } int cal_int(char* data,int size,int &rts) { if(data == 0 || size < 1) return 0; int val=0; rts = 0; if(*data == '0'){ data++;size--;rts++; if(size > 0){ if(*data == 'x' || *data == 'X'){ // 16 data++;size--;rts++; while(size > 0 && ((*data >= '0' && *data <= '9') || (*data >= 'a' && *data <= 'f') || (*data >= 'A' && *data <= 'F') ) ){ if(*data >= '0' && *data <= '9'){ val = val*16 + *data - '0'; }else if(*data >= 'a' && *data <= 'f'){ val = val*16 + *data - 'a' + 10; }else if(*data >= 'A' && *data <= 'F'){ val = val*16 + *data - 'A' + 10; }else throw 0; data++;size--;rts++; } }else{ // 8 while(size > 0 && *data >= '0' && *data <= '7'){ val = val*8 + *data - '0'; data++;size--;rts++; } } } }else if(*data >= '1' && *data <= '9'){ // 10 while(size > 0 && *data >= '0' && *data <= '9'){ val = val*10 + *data - '0'; data++;size--;rts++; } }else throw 0; return val; }