输入一个算数表达式求值,数字都是十进制整数(必须支持负数),运算必须支持+-*/(),返回结果。

我的开始的思路是先扫描括号,在括号里依次扫描×,/,+,-,将其两边的数进行运算。问题是但是数字可能不止一位,也可能是负数,要讲两个字符链接在一起运算不会操作。

字符串分割问题,如果你的输入有空格那就非常简单了,直接按照空格分割,没有的话就按照数字分割,并且将所有的-x看作一个数据

  • 文章:/*输入一个字符串,判断其是否为回文。(回文字符串是指从左到右读和从右到左读完全相同的字符)*/ 中也许有你想要的答案,请看下吧
  • 除此之外, 这篇博客: 【牛客刷题】/*关于C学习过程中的经典习题剖析*/中的 六、计算求和 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 🍎问题描述:

    假设求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,

    例如:2+22+222+2222+22222

    🍈问题分析:通过给出的问题描述可以发现,需要求和的第i项有i个a,所以可以假设第i项为temp,则第i+1项为temp*10+a;

    🍔🍔代码实现:

    #include<stdio.h>
    int main()
    {
    	int a = 0;
    	int n = 0;
    	int i = 0;
    	int sum = 0;
    	int tmp = 0;
     
     
    	scanf("%d%d", &a, &n);
    	for(i=0; i<n; i++)
    	{
    		tmp = tmp*10+a;
    		sum += tmp;
    	}
    	printf("%d\n", sum);
     
    	return 0;
    }
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以提供一个逆波兰表达式求值的算法,使用栈来实现。将中缀表达式转换成逆波兰表达式后进行求值,具体步骤如下:

    1. 初始化两个栈,一个用来存储运算符,一个用来存储操作数。
    2. 从左到右扫描中缀表达式的每个元素,如果是数字则入操作数栈,如果是运算符则入运算符栈。如果是左括号,则将其入运算符栈;如果是右括号,则把栈顶的元素弹出并加入到操作数栈中,直到遇到左括号为止。
    3. 进行运算,从运算符栈中取出一个运算符,再从操作数栈中弹出两个操作数。然后将这两个操作数按照运算符进行运算,并将结果压回操作数栈中。
    4. 重复步骤3,直到运算符栈为空。
    5. 最后操作数栈中剩下的元素就是计算结果。

    这里提供一个简单的示例代码:

    include

    include

    include

    using namespace std;

    bool IsOperator(const char& ch) { return ch == '+' || ch == '-' || ch == '*' || ch == '/'; }

    bool IsDigit(const char& ch) { return ch >= '0' && ch <= '9'; }

    int Calculate(char op, int num1, int num2) { switch (op) { case '+': return num1 + num2; case '-': return num1 - num2; case '*': return num1 * num2; case '/': if (num2 == 0) { cout