题目描述
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
输入格式
一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“×”,且没有括号,所有参与运算的数字均为 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。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cstdio>
using namespace std;
int main()
{
long long a,b,sum = 0;
char c = 0, d;
bool tf = true;
while(tf) {
scanf("%lld",&a);
tf = scanf("%c",&d) == 1 ? true:false;
if(c == 0) {
b = a;
}
if(c == '+') {
sum = (sum + b) % 10000;
b = a;
}
if(c == '*') {
b = ( b * a) % 10000;
}
if(!tf ) {
sum = (sum + b) % 10000;
}
c = d;
}
printf("%lld\n",sum);
return 0;
}
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cstdio>
using namespace std;
//#include <bits/stdc++.h>
//using namespace std;
//typedef long long ll;
long long a[101010],cnt=1,sum=0;
char c[101010];
int main(){
scanf("%lld",&a[cnt]);
a[cnt]%=10000;//读入第一个数
while(cin>>c[cnt]){//一个一个读,读到不再有新的运算符,也就不会再有新的运算
cin>>a[++cnt];
a[cnt]%=10000;//模
}
for(int i=cnt;i>=1;i--){
if(c[i]=='*'){//判断乘法
a[i]*=a[i+1];//赋值
a[i]%=10000;
a[i+1]=0;)
}
}
for(int i=1;i<=cnt;i++){//一个一个加
sum+=a[i];
sum%=10000;//叕模
}
printf("%lld",sum);//完美的输出
return 0;
}
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
const int mod=10000;
string s;
long long now=0,result=0,time=1;
bool isTime=false;
int main()
{
freopen("expr.in","r",stdin);
freopen("expr.out","w",stdout);
cin>>s;
int len=s.length();
for(int i=0;i<len;i++){
switch(s[i]){
case '+':{
if(isTime==true){
result+=time*now;
result=result%mod;
isTime=false;
time=1;
}
else{
result+=now;
result=result%mod;
}
now=0;
break;
}
case '*':{
time*=now;
time%=mod;
isTime=true;
now=0;
break;
}
default:{
if((s[i]>='0')&&(s[i]<='9'))
now=(now*10+s[i]-'0')%mod;
break;
}
}
}
if(isTime){
result+=time*now;
result=result%10000;
}
else{
result+=now;
result=result%10000;
}
cout<<result<<endl;
return 0;
}