diff --git a/C_Projects/Pintia/21-Class-Contest-Warmup/3-1.c b/C_Projects/Pintia/21-Class-Contest-Warmup/3-1.c index 66291fe..59aa419 100644 --- a/C_Projects/Pintia/21-Class-Contest-Warmup/3-1.c +++ b/C_Projects/Pintia/21-Class-Contest-Warmup/3-1.c @@ -14,38 +14,54 @@ // 将输入的数字和运算符按给定顺序分别压入堆栈 S1​ 和 S2​,将执行计算的最后结果输出。注意所有的计算都只取结果的整数部分。题目保证计算的中间和最后结果的绝对值都不超过 10^9。 // 如果执行除法时出现分母为零的非法操作,则在一行中输出:ERROR: X/0,其中 X 是当时的分子。然后结束程序。 + +/* 注释是好文明 ———— RaySky */ + #include -int op(int x, char op, int y); +int op(int x, char op, int y); // op:运算函数 (为什么不命名成calc() int main(void){ - int n; - scanf("%d", &n); - int nums[n]; - char ops[n - 1]; - for (int i = 0; i < n; i++){ - scanf("%d", &nums[i]); + int n; //正整数n,为栈S1中的数字个数 + scanf("%d", &n); + int nums[n]; //数字栈S1 + char ops[n - 1]; //运算符栈S2 + +/* for (int i = 0; i < n; i++){ + scanf("%d", &nums[i]); + } */ +/* ↑你这样写压栈不是很...呃至少在我看来稍微有点反直觉,所以我改了一下,你应该能看懂吧( */ + + for(int i=n-1;i>=0;i--){ + scanf("%d", &nums[i]); //最后输入的元素在栈的最顶上,下标为0( } - for (int i = 0; i < n - 1; i++){ + for (int i=(n-1)-1; i>=0; i--){ + scanf("%c", &ops[i]); //跟上面同理 + if (ops[i] == '\n' || ops[i] == ' '){ + i += 1; + } + } +/* for (int i = 0; i < n - 1; i++){ scanf("%c", &ops[i]); if (ops[i] == '\n' || ops[i] == ' '){ i -= 1; } - } - for (int i = n - 1; i > 0; i--){ + } */ +/* ↑改你压栈代码 梅开二度 */ + for (int i=0; i 40 5 8 5 + / * - + +--> 40 5 3 + / * + +--> 40 15 + / + +--> 2 + + +样例2: + 2 5 8 4 4 + * / - + + +--> 2 5 8 8 + * / - + +--> 2 5 0or + * / + +--> 5/0 error + +*/ +