1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define OFFSET '0' typedef double stackElementT; typedef struct { stackElementT *contents; int maxSize; int top; int min2; } stackT; void StackInit(stackT *stackP, int maxSize) { stackElementT *newContents; newContents = (stackElementT *)malloc(sizeof(stackElementT)*maxSize); if (newContents == NULL) { fprintf(stderr, "Not enough memory.\n"); exit(1); } stackP->contents = newContents; stackP->maxSize = maxSize; stackP->top = -1; } void StackDestroy(stackT *stackP) { free(stackP->contents); stackP->contents = NULL; stackP->maxSize = 0; stackP->top = -1; } int StackIsEmpty(stackT *stackP) { return stackP->top < 0; } int StackIsFull(stackT *stackP) { return stackP->top >= stackP->maxSize-1; } void StackPush(stackT *stackP, stackElementT element) { if(StackIsFull(stackP)) { fprintf(stderr, "Can't push element: stack is full.\n"); exit(1); } stackP->contents[++stackP->top] = element; } stackElementT StackPop(stackT *stackP) { if(StackIsEmpty(stackP)) { fprintf(stderr, "Can't pop element: stack is empty.\n"); exit(1); } return stackP->contents[stackP->top--]; } int is_operand(char x) { switch(x) { case '+': case '-': case '/': case '*': case '^': return 1; default : return 0; } } double postfix(char* expr) { int length = strlen(expr), i; double temp = 0, temp2; stackT stack; StackInit(&stack, 100000); for (i = 0; i < length; i++) { if ((expr[i] >= '0') && (expr[i] <= '9')) { temp *= 10; temp += expr[i]-OFFSET; } else if (expr[i] == ' ') { StackPush(&stack, temp); temp = 0; } else { switch (expr[i]) { case '+': { temp = StackPop(&stack); temp2 = StackPop(&stack); printf("%.0f+%.0f -> ", temp2, temp); StackPush(&stack, temp2+temp); temp = temp2+temp; } break; case '-': { temp = StackPop(&stack); temp2 = StackPop(&stack); printf("%.0f-%.0f -> ", temp2, temp); StackPush(&stack, temp2-temp); temp = temp2-temp; } break; case '/': { temp = StackPop(&stack); temp2 = StackPop(&stack); printf("%.0f/%.0f -> ", temp2, temp); StackPush(&stack, temp2/temp); temp = temp2/temp; } break; case '*': { temp = StackPop(&stack); temp2 = StackPop(&stack); printf("%.0f*%.0f -> ", temp2, temp); StackPush(&stack, temp2*temp); temp = temp2*temp; } break; case '^': { temp = StackPop(&stack); temp2 = StackPop(&stack); printf("%.0f^%.0f -> ", temp2, temp); StackPush(&stack, pow(temp2, temp)); temp = pow(temp2, temp); } default: break; } } } return StackPop(&stack); } int main() { while (1) { printf("post> "); char *expr = malloc(1000*sizeof(char) + 1); fgets(expr, 1000, stdin); printf("\n %.0f\n", postfix(expr)); free(expr); } } |
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8bWF0aC5oPgojZGVmaW5lIE9GRlNFVCAnMCcKCnR5cGVkZWYgZG91YmxlIHN0YWNrRWxlbWVudFQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgc3RhY2tFbGVtZW50VCAqY29udGVudHM7CiAgaW50IG1heFNpemU7CiAgaW50IHRvcDsKICBpbnQgbWluMjsKfSBzdGFja1Q7Cgp2b2lkIFN0YWNrSW5pdChzdGFja1QgKnN0YWNrUCwgaW50IG1heFNpemUpIHsKCXN0YWNrRWxlbWVudFQgKm5ld0NvbnRlbnRzOwoJbmV3Q29udGVudHMgPSAoc3RhY2tFbGVtZW50VCAqKW1hbGxvYyhzaXplb2Yoc3RhY2tFbGVtZW50VCkqbWF4U2l6ZSk7CglpZiAobmV3Q29udGVudHMgPT0gTlVMTCkgewoJCWZwcmludGYoc3RkZXJyLCAiTm90IGVub3VnaCBtZW1vcnkuXG4iKTsKCQlleGl0KDEpOwoJfQoKCXN0YWNrUC0+Y29udGVudHMgPSBuZXdDb250ZW50czsKCXN0YWNrUC0+bWF4U2l6ZSA9IG1heFNpemU7CglzdGFja1AtPnRvcCA9IC0xOwp9Cgp2b2lkIFN0YWNrRGVzdHJveShzdGFja1QgKnN0YWNrUCkgewoJZnJlZShzdGFja1AtPmNvbnRlbnRzKTsKCXN0YWNrUC0+Y29udGVudHMgPSBOVUxMOwoJc3RhY2tQLT5tYXhTaXplID0gMDsKCXN0YWNrUC0+dG9wID0gLTE7Cn0KCmludCBTdGFja0lzRW1wdHkoc3RhY2tUICpzdGFja1ApIHsgcmV0dXJuIHN0YWNrUC0+dG9wIDwgMDsgfQoKaW50IFN0YWNrSXNGdWxsKHN0YWNrVCAqc3RhY2tQKSB7IHJldHVybiBzdGFja1AtPnRvcCA+PSBzdGFja1AtPm1heFNpemUtMTsgfQoKdm9pZCBTdGFja1B1c2goc3RhY2tUICpzdGFja1AsIHN0YWNrRWxlbWVudFQgZWxlbWVudCkgewoJaWYoU3RhY2tJc0Z1bGwoc3RhY2tQKSkgewoJCWZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgcHVzaCBlbGVtZW50OiBzdGFjayBpcyBmdWxsLlxuIik7CgkJZXhpdCgxKTsKCX0KCXN0YWNrUC0+Y29udGVudHNbKytzdGFja1AtPnRvcF0gPSBlbGVtZW50Owp9CgpzdGFja0VsZW1lbnRUIFN0YWNrUG9wKHN0YWNrVCAqc3RhY2tQKSB7CglpZihTdGFja0lzRW1wdHkoc3RhY2tQKSkgewoJCWZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgcG9wIGVsZW1lbnQ6IHN0YWNrIGlzIGVtcHR5LlxuIik7CgkJZXhpdCgxKTsKCX0KCXJldHVybiBzdGFja1AtPmNvbnRlbnRzW3N0YWNrUC0+dG9wLS1dOwp9CgppbnQgaXNfb3BlcmFuZChjaGFyIHgpIHsKICAgIHN3aXRjaCh4KSB7CiAgICAgICAgY2FzZSAnKyc6IGNhc2UgJy0nOiBjYXNlICcvJzogY2FzZSAnKic6IGNhc2UgJ14nOiByZXR1cm4gMTsKICAgICAgICBkZWZhdWx0IDogcmV0dXJuIDA7CiAgICB9Cn0KCmRvdWJsZSBwb3N0Zml4KGNoYXIqIGV4cHIpIHsKCWludCBsZW5ndGggPSBzdHJsZW4oZXhwciksIGk7Cglkb3VibGUgdGVtcCA9IDAsIHRlbXAyOwoJc3RhY2tUIHN0YWNrOwoJU3RhY2tJbml0KCZzdGFjaywgMTAwMDAwKTsKCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewoJCWlmICgoZXhwcltpXSA+PSAnMCcpICYmIChleHByW2ldIDw9ICc5JykpIHsKCQkJdGVtcCAqPSAxMDsKCQkJdGVtcCArPSBleHByW2ldLU9GRlNFVDsKCQl9CiAgICAgICAgZWxzZSBpZiAoZXhwcltpXSA9PSAnICcpIHsKCQkJU3RhY2tQdXNoKCZzdGFjaywgdGVtcCk7CgkJCXRlbXAgPSAwOwogICAgICAgIH0KCgkJZWxzZSB7CgkJCXN3aXRjaCAoZXhwcltpXSkgewoKCQkJCWNhc2UgJysnOiB7CgkJCQkJdGVtcCA9IFN0YWNrUG9wKCZzdGFjayk7CgkJCQkJdGVtcDIgPSBTdGFja1BvcCgmc3RhY2spOwoJCQkJCXByaW50ZigiJS4wZislLjBmIC0+ICIsIHRlbXAyLCB0ZW1wKTsKCQkJCQlTdGFja1B1c2goJnN0YWNrLCB0ZW1wMit0ZW1wKTsKCQkJCQl0ZW1wID0gdGVtcDIrdGVtcDsKCQkJCX0KCQkJCQlicmVhazsKCgkJCQljYXNlICctJzogewoJCQkJCXRlbXAgPSBTdGFja1BvcCgmc3RhY2spOwoJCQkJCXRlbXAyID0gU3RhY2tQb3AoJnN0YWNrKTsKCQkJCQlwcmludGYoIiUuMGYtJS4wZiAtPiAiLCB0ZW1wMiwgdGVtcCk7CgkJCQkJU3RhY2tQdXNoKCZzdGFjaywgdGVtcDItdGVtcCk7CgkJCQkJdGVtcCA9IHRlbXAyLXRlbXA7CgkJCQl9CgkJCQkJYnJlYWs7CgoJCQkJY2FzZSAnLyc6IHsKCQkJCQl0ZW1wID0gU3RhY2tQb3AoJnN0YWNrKTsKCQkJCQl0ZW1wMiA9IFN0YWNrUG9wKCZzdGFjayk7CgkJCQkJcHJpbnRmKCIlLjBmLyUuMGYgLT4gIiwgdGVtcDIsIHRlbXApOwoJCQkJCVN0YWNrUHVzaCgmc3RhY2ssIHRlbXAyL3RlbXApOwoJCQkJCXRlbXAgPSB0ZW1wMi90ZW1wOwoJCQkJfQoJCQkJCWJyZWFrOwoKCQkJCWNhc2UgJyonOiB7CgkJCQkJdGVtcCA9IFN0YWNrUG9wKCZzdGFjayk7CgkJCQkJdGVtcDIgPSBTdGFja1BvcCgmc3RhY2spOwoJCQkJCXByaW50ZigiJS4wZiolLjBmIC0+ICIsIHRlbXAyLCB0ZW1wKTsKCQkJCQlTdGFja1B1c2goJnN0YWNrLCB0ZW1wMip0ZW1wKTsKCQkJCQl0ZW1wID0gdGVtcDIqdGVtcDsKCQkJCX0KCQkJCQlicmVhazsKCgkJCQljYXNlICdeJzogewoJCQkJCXRlbXAgPSBTdGFja1BvcCgmc3RhY2spOwoJCQkJCXRlbXAyID0gU3RhY2tQb3AoJnN0YWNrKTsKCQkJCQlwcmludGYoIiUuMGZeJS4wZiAtPiAiLCB0ZW1wMiwgdGVtcCk7CgkJCQkJU3RhY2tQdXNoKCZzdGFjaywgcG93KHRlbXAyLCB0ZW1wKSk7CgkJCQkJdGVtcCA9IHBvdyh0ZW1wMiwgdGVtcCk7CgkJCQl9CgoJCQkJZGVmYXVsdDoKCQkJCQlicmVhazsKCgkJCX0KCQl9Cgl9CgoJcmV0dXJuIFN0YWNrUG9wKCZzdGFjayk7Cn0KCmludCBtYWluKCkgewoJd2hpbGUgKDEpIHsKCQlwcmludGYoInBvc3Q+ICAgIik7CgkJY2hhciAqZXhwciA9IG1hbGxvYygxMDAwKnNpemVvZihjaGFyKSArIDEpOwoJCWZnZXRzKGV4cHIsIDEwMDAsIHN0ZGluKTsKCQlwcmludGYoIlxuICAgICAlLjBmXG4iLCBwb3N0Zml4KGV4cHIpKTsKCQlmcmVlKGV4cHIpOwoJfQp9
prog.c: In function ‘main’: prog.c:139: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result
-
upload with new input
-
result: Success time: 0s memory: 262144 kB returned value: 1
2 3 +
post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post> 2+3 -> 5 post>Not enough memory.
-
result: Success time: 0s memory: 2640 kB returned value: 1
post>
Can't pop element: stack is empty.


