jzoj表达式求值【数论】

编程入门 行业动态 更新时间:2024-10-26 11:16:38

jzoj表达式求值【<a href=https://www.elefans.com/category/jswz/34/1769432.html style=数论】"/>

jzoj表达式求值【数论】

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


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

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

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

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


>Sample Input
1+1000000003*1

>Sample Output
4


>解题思路
由于最后只有求后四位,所以每个数都只取后四位来计算。


>代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=105;
int ans,sum,t[2]; //所有乘法都变为t[0]*t[1],t[0]为多个数的乘积,t[1]暂时存另一个因数
string s;
int main()
{//freopen("expr.in","r",stdin);//freopen("expr.out","w",stdout);cin>>s;for(int i=0;i<s.size();i++){if(s[i]>='0'&&s[i]<='9') t[sum]=t[sum]%1000*10+s[i]-'0'; //如果是数字的话把数字存入当前数字的最后一位(只要四位)else{if(sum==1) t[0]=t[0]*t[1]%10000,sum=t[1]=0; //如果有第二个因数的话,两数压缩为一个数if(s[i]=='*') sum=1; //还有因数if(s[i]=='+'){ans=(ans+t[0])%10000; //累加sum=t[0]=t[1]=0; //重新记录}}}if(sum==1) t[0]=t[0]*t[1]%10000;printf("%d",(ans+t[0])%10000);return 0;
}

更多推荐

jzoj表达式求值【数论】

本文发布于:2023-07-28 21:47:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1327125.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数论   表达式   求值   jzoj

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!