题目链接:​​https://www.luogu.org/problem/P1981​

题目描述


给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。


输入格式


一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“×”,且没有括号,所有参与运算的数字均为 0 到 2^31-1 之间的整数。

输入数据保证这一行只有0-9、+、×这 12种字符。


输出格式


一个整数,表示这个表达式的值。

注意:当答案长度多于 4 位时,请只输出最后4 位,前导0 不输出。


输入输出样例

输入 #1

  1+1*3+4

输出 #1

  8

输入 #2

  1+1234567890*1

输出 #2

  7891

输入 #3

  1+1000000003*1

输出 #3

  4

说明

对于30%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100;

对于80%的数据,0≤表达式中加法运算符和乘法运算符的总数≤1000;

对于100%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100000。

分析

每个运算数都不超过int的表示范围,可以直接输入。

至于拆分运算数和运算符,原本我还担心直接输入无法自动拆分,其实没有问题。 


1 #include<iostream>  2 #include<stdio.h>  3 using namespace std;  4 const int mod=1e4;  5   6 int x,y,k,ans=0;  7 char fu;  8   9 int main() 10 { 11  12     scanf("%d",&x); 13     x=x%mod; 14     while(scanf("%c",&fu)!=EOF) 15     { 16         if(fu=='\n') break; 17         scanf("%d",&y); 18         y=y%mod; 19         if(fu=='+') 20         { 21             ans=(ans%mod+x%mod)%mod; 22             x=y; 23         }  24         else if(fu=='*') 25         { 26             x=x%mod*y%mod; 27         } 28     } 29     ans=(ans%mod+x%mod)%mod; 30     printf("%d",ans); 31     return 0; 32 }


原文代码:

洛谷 P1981 表达式求值_运算符洛谷 P1981 表达式求值_#include_02

1 #include<bits/stdc++.h>  2   3 using namespace std;  4   5 const int mod=1e4;  6   7 int x,y,k,ans=0;  8 char fu;  9  10 int main() 11 { 12     cin>>x; 13     x=x%mod; 14     while(cin>>fu) 15     { 16         if(fu=='\n') break; 17         cin>>y; 18         y=y%mod; 19         if(fu=='+') 20         { 21             ans=(ans%mod+x%mod)%mod; 22             x=y; 23         } 24            25         if(fu=='*') 26         { 27             x=x%mod*y%mod; 28         } 29  30     } 31      32     ans=(ans%mod+x%mod)%mod; 33      34     printf("%d",ans); 35  36     return 0; 37 }

View Code

 ​