洛谷1449c语言

这道题很明显和之前做的逆波兰表达式(见leecodeLCR036逆波兰表达式)就是一个模子里刻出来的题,都是利用栈进行表达式的计算

BUT这道题和我们自己之前写的不一样的地方在于对输入的特殊处理——尤其是因为在这里我们需要自己对输入进行处理

原本我想一次性将所有(不管是运算符号还是数字字符)以字符串的形式先进行读取,读取完毕之后将数字字符串转换为整型数字但是由于.还有运算符之间并没有进行分隔开来,注定我们只能使用getchar“逐字逐句”地进行读取

进行读取之后我们先要进行判断——是数字还是运算符,数字的话就将他加投入到数字之中直至遇到.为止——说明当前数字读取完毕——>放入数字的栈之中进行暂时的存储

因为使用的是getchar进行单个字符的读取,所以我们在读取的同时可以将栈中数据拿出进行计算,不需要再编写函数

#include<stdio.h>
#include<stdlib.h>
int stack[1000];
int top=0;
int main(){
char buf;
int num=0;
while((buf=getchar())!='@'){
    //首先要进行读取,读取时字符串当中的点是关键
    if(buf>='0'&&buf<='9'){//注意读到0的情况,不要把0给忘了
        num=num*10+(buf-'0');
    }
    else if(buf=='.'){
        // printf("%d\n",num);
        stack[top++]=num;
        num=0;
    }
    else if(buf=='+'){
        int num2=stack[--top];
        int num1=stack[--top];
        stack[top++]=num1+num2;
        // printf("%d\n",stack[top-1]);
    }
    else if(buf=='-'){
        int num2=stack[--top];
        int num1=stack[--top];
        stack[top++]=num1-num2;
        // printf("%d\n",stack[top-1]);

    }
    else if(buf=='*'){
        int num2=stack[--top];
        int num1=stack[--top];
        stack[top++]=num1*num2;
        // printf("%d\n",stack[top-1]);
    }
    else if(buf=='/'){
        int num2=stack[--top];
        int num1=stack[--top];
        stack[top++]=(num1/num2);
        // printf("%d\n",stack[top-1]);
    }

}
    printf("%d",stack[--top]);
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值