10-求表达式值得后四位

175 阅读2分钟

问题描述:

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

输入格式

输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符'+'和乘法运算符'*',且没有括号,所有参与运算的数字均为0到2^{31}-1之间的整数。输入数据保证这一行只有 0~9'+''*'这 12 种字符。(输入字符串长度不超过 600000)

输出格式

输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于 4位时,请只输出最后 4位。不要输出多余的前导零。

样例输入1
1+1*3+4
样例输出1
8
样例输入2
1+1234567890*1
样例输出2
7891

思路:求表达式值得后四位(%10000)取余就能获得后四位

具体代码:

#include<iostream>
using namespace std;
int a[600010];
int main()
{
	//1+2*3+4
  int x,ans=1,n,p=0;
  char c;
  cin>>a[1];//为了便于计算,我们先把第一个字符(有可能是数字)输入1
  while(scanf("%c",&c)!=EOF)//输入表达式符号+ * +
    {
      if(c=='\n')//如果输入换行符,那么预示着表达式输入完毕
        {
          break;
        }
      scanf("%d",&x);//输入表达式中的数字2 3 4
      x=x%10000;//取模 获得后四位2 3 4
      if(c=='+')//计算加法的情况
        {
          a[++ans]=x; //a[2]=2  a[3]=4
        }
      else//计算乘法的情况
        {
          n=a[ans];//a[2]  n=2
          a[ans]=(n*x)%10000;//取模 6 a[2]=6
        }
    }
  for(int i=1; i<=ans; i++)
    {
    	//printf("a[%d]=%d\n",i,a[i]);//可以尝试输出 数组元素 
      p=p+a[i]; //因为是分别储存的结果,所以要求累加和 a[1]=1 a[2]=6 a[3]=4  1+6+4=11
    }
  p=p%10000;//取模 获得后四位
  printf("%d\n",p);
  return 0;
}

\