C++输入表达式,求值

如题所述

输入格式:

输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘

法运算符“*”,且没有括号,所有参与运算的数字均为 0 到 2^31-1 之间的整数。输入数据保

证这一行只有 0~ 9、+、*这 12 种字符。

输出格式:

输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于 4 位时,

请只输出最后 4 位,前导 0 不输出。

#include <iostream>#include <cctype>
using namespace std;
int main()
{
    string str;
    cin >> str;
    int s=0,p=1,x=0;
    str+='+';//防止表达式中只有一个数。
    for (int i=0;i<str.size();i++)
    {
        if (isdigit(str[i]))//如果是数字字符,转整数,存入x。
            x=x*10+(str[i]-48);
        else if (str[i]=='*')
        {
            p*=(x%10000);//防止爆
            p%=10000;
            x=0;//变量必须初始化
        }
        else if (str[i]=='+')
        {
            p*=(x%10000);
            s+=p;
            s%=10000;
            p=1;
            x=0;
        }
    }
    cout << s << endl;
    return 0;
}

求采纳,谢谢!

温馨提示:内容为网友见解,仅供参考
无其他回答

C++输入表达式,求值
法运算符“*”,且没有括号,所有参与运算的数字均为 0 到 2^31-1 之间的整数。输入数据保 证这一行只有 0~ 9、+、*这 12 种字符。输出格式:输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于 4 位时,请只输出最后 4 位,前导 0 不输出。include <iostream>#includ...

算数表达式求值c++
2)从左到右依次读入后缀表达式的每个字符,如是操作数,入栈;如是操作符,弹出两个操作数,计算,结果入栈,直到表达式末尾。栈中的唯一数即是结果。注意弹出的第一个操作数是位于运算符右边的数。 [cpp] view plain copy \/\/前缀表达式->后缀表达式,再求值 int CaculateExpression_2(string postExp) { \/\/先...

c++,计算求值
6=*(++p)=*(x+3)=4

C++表达式的值 怎么算出来的?
1、!是取非操作,0为假,非0为真,!真=0,!假=1,所以!0=1,!5=0 2、x=a是赋值操作,不是判断相等,即把a值赋值给x,所以x=a;3、先计算&&左边的式子,!(a+b)+c-1=!7+5-1=4=0+5-1=4,再计算&&右边的式子b+c\/2=4+5\/2=4+2=6,所以整个式子是4&&6=1 ...

C++实现中缀表达式求值代码
inttop;};voidInitstack(sqstack*s){s->top=0;}voidPush(sqstack*s,elemtypex){if(s->top==maxsize-1)printf("Overflow\\n");else{s->top++;s->stack[s->top]=x;}}voidPop(sqstack*s,elemtype*x){if(s->top==0)printf("underflow\\n");else{*x=s->stack[s->top];s->top-...

C++表达求值
printf("请输入表达式%d: ", i);scanf("%s", pexpr + 101*i);char* p = pexpr + 101*i;float paramA = 0;float paramB = 0;char opertmp = ' ';char oper = ' ';while(1){ int ret = sscanf(p, "%f%c", ¶mB, &opertmp);p = strchr(p, opertmp) + 1;if ...

c++: 表达式(x=4*5,x*5),x+25的值是啥,怎么计算
逗号表达式,从左往右计算,先算第一个,x=20,再算x*5,但是没有改变x的值,再算x+25,还是没有改变x的值,所以x最终还是20.。如果有a=(x=4*5,x*5),x+25;那么a的值将是后面式子的最后一个的计算结果,即x+25,即45

c++中,逗号表达式(x=4*5,x*5),x+25的值怎么求?
逗号表达式(x=4*5,x*5),x+25 不妨另设一个变量a,并赋值:a=((x=4*5,x*5),x+25);① 注意一定要在最外面再加一个括号。否则,是这样的:a=(x=4*5,x*5),x+25;② 这样会把a=(x=4*5,x*5)与x+25割裂开了,成了一个新的逗号表达式。所以,①才是唯一正确的解释。看一看这...

c++表达式求值
\/*** 只适合整数的表达式求值 ***\/ \/***其中部分可作修改,表达式也可是输入的***\/ include "iostream.h"const int n0=30;int s1[n0+1]; \/\/操作数栈 char s2[n0+1]; \/\/运算符栈 int t1,t2;int num[4]; \/\/提取表达式中的整数 void calcu() \/\/一次计算 { int x1,x2,x;char ...

(C++) 输入一个由数字、+、-、*、\/及括号组成的自述表达式,求其值。
typedef float SElemType_f;typedef char SElemType_ch;typedef int Status;include<iostream.h> include<stdlib.h> \/*free()头文件 *\/ define OK 1 define ERROR 0 typedef struct SqStack_f{ \/* 运算数栈 *\/ SElemType_f *base; \/* 在栈构造之前和销毁之后,base的值为NULL *\/ SEle...

相似回答