啊我没搞懂错哪了

P1449 后缀表达式

HSyuio77 @ 2023-08-17 21:47:52

#include<iostream>
#include<cstring>
#include<deque>
#include<cmath>
using namespace std;
int main()
{
    string s;
    cin>>s;
    int i=0;
    int h=0;
    int sum=0;
    deque <int> p;
    int  a[1000000];
    memset(a,0,sizeof(a));
    while(s[i]!='@')
    {
        if(s[i]>='0'&&s[i]<='9')
        {
            a[h]=s[i]-'0';
            h++;
        }
        if(s[i]=='.')
        {
            for(int k=i-h;k<i;k++)
            {
                sum+=a[k]*pow(10,h-(i-k-1)); // 计算数值时需要乘以相应位数的权重
            }       
            p.push_back(sum);
            sum=0;
            h = 0; 
        }
        else
        {
            int x=p.back();
            p.pop_back();
            int y=p.back();
            p.pop_back();
            if(s[i]=='+')
            {
                p.push_back(x+y);
            }
            if(s[i]=='-')
            {
                p.push_back(y-x);
            }
            if(s[i]=='*')
            {
                p.push_back(y*x);
            }
            if(s[i]=='/')
            {
                p.push_back((float)y/x);
            }
        }
        i++;
    }
    cout<<p.back();
    return 0;
}

by cleverclever @ 2023-08-20 17:32:32

@1875311061hsy

给你一个简单一点的代码,很容易理解。

#include <bits/stdc++.h>

using namespace std;

int arr[55], num, top;

int main()
{
    string s;

    cin >> s;

    for (int i = 0; i < s.size(); i++)
        if (s[i] >= '0' && s[i] <= '9')     //计算输入的数字。 
            num = num * 10 + (s[i] - '0');
        else if (s[i] == '.')           //当一个数结束时。 
                arr[++top] = num, num = 0;
            else if (s[i] == '@')       //当结束时退出循环。 
                    break;
                else if (s[i] == '+')           //加法。 
                        arr[--top] += arr[top + 1];
                    else if (s[i] == '-')           //减法。 
                            arr[--top] -= arr[top + 1];
                        else if (s[i] == '*')           //乘法。 
                                arr[--top] *= arr[top + 1];
                            else if (s[i] == '/')       //除法。 
                                    arr[--top] /= arr[top + 1];

    cout << arr[top] << endl;  //输出最后的结果。 

    return 0; 
}

by HSyuio77 @ 2023-08-20 18:47:34

@cleverclever 后面我也用这个写出来啦谢谢你


by cleverclever @ 2023-08-20 19:02:38

@1875311061hsy 不客气OwO~


|