题目背景
NOIP2013 普及组 T2
题目描述
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
输入格式
一行,为需要你计算的表达式,表达式中只包含数字、加法运算符 + 和乘法运算符 *,且没有括号,所有参与运算的数字均为 0 到 231−1 之间的整数。
输入数据保证这一行只有 0123456789+* 这 12 种字符。
输出格式
一个整数,表示这个表达式的值。
注意:当答案长度多于 4 位时,请只输出最后 4 位,前导 0 不输出。
输入输出样例
输入 #1复制
1+1*3+4
输出 #1复制
8
输入 #2复制
1+1234567890*1
输出 #2复制
7891
输入 #3复制
1+1000000003*1
输出 #3复制
4
说明/提示
对于 30%30% 的数据,0≤0≤ 表达式中加法运算符和乘法运算符的总数 ≤100。
对于 80%80% 的数据,0≤0≤ 表达式中加法运算符和乘法运算符的总数≤1000。
对于 100%100% 的数据,0≤0≤ 表达式中加法运算符和乘法运算符的总数 ≤100000。
#include<stdio.h>
#include<string.h>
#include<math.h>
char f[100010],d[10000000];
int a[100000],b[100000],c[100000],e[100000]={-1};
int main()
{
long long m=0,l=1,x=0,k=0,r=0,sum=0;
scanf("%s",d);
int n=strlen(d);
f[0]='+';
for(int i=0;i<n;i++)
{
if(d[i]=='+'||d[i]=='*')
{
m++;
e[m]=i;
f[m]=d[i];
// printf("%d %d %c\n",m,e[m],f[m]);
}
}
m++;
e[m]=n;
while(l<=m)
{
for(int i=e[l]-1;i>e[l-1];i--)
{
if(k<4)
{
r=r+(d[i]-48)*pow(10,k);
}
k++;
// printf("%d\n",r);
}
if(f[l-1]=='+')
{
x++;
a[x]=r;
// printf("%d\n",a[x]);
}
else if(f[l-1]=='*')
{
a[x]=a[x]*r%10000;
}
k=0,r=0;
l++;
}
for(int i=1;i<=x;i++)
sum=(sum+a[i])%10000;
printf("%d",sum);
}
第一次做的话这题怪有意思的,但是不得不承认这题有毛病