CSP-J-2013-表达式求值

[NOIP2013 普及组] 表达式求值 - 洛谷


解题思路:

1.首先分析题意,要求对输入的内容进行计算求值,有乘法和加法运算,那么首先想到的应该是把输入的整数放到一个整数数组中,输入 的字符放到一个字符数组中,然后判断运算符的类型,进行操作

2.首先先读入第一个数,这样,我们就可以利用while循环每次读入两个值,一个是运算符,一个整数,因为涉及到int会溢出,所以,所有的整数和整数数组全部用long long

3.题中说,如果答案超过4位数,那么只需要将后四位输出就行,可以立马想到模运算,用答案直接%10000即可,考虑到在求和求积的过程中,long long会溢出,所以我们输入的时候,还有计算每一步的时候,都去%10000(参考模运算的运算规则)

4.将数字和字符存到数组中后,从后往前扫一遍,如果是乘号,那么将此位置和后一个位置的乘积赋值给此位置,前一个位置变为0,方便一会求和,注意对乘积的结果也要%10000

5.最后,扫一遍整数数组,求和,取模输出


#include<bits/stdc++.h>
using namespace std;
long long a[101000];
char b[100000];
int main()
{
	long long num;
	char ans;
	int cnt=1;
	cin>>a[cnt];//先读入第一个数 
	while(cin>>ans>>num)//依次读入运算符和数字 
	{
		b[cnt]=ans;//运算符存到字符数组中 
		a[++cnt]=num%10000;//数字存到a数组中 
	}
	for(int i=cnt;i>=1;i--)//从后往前扫一遍 
	{
		if(b[i]=='*')//如果是乘法 
		{
			a[i]=a[i]*a[i+1];//将乘积赋值给i位置的元素值 
			a[i]=a[i]%10000;//对于a[i]取模 
			a[i+1]=0;//上一个元素设为0 
		}
	}
	long long sum=0;//设置累加器 
	for(int i=1;i<=cnt;i++)
	{
		sum=sum+a[i];//依次求和 
		sum=sum%10000;//每次取模 
	}
	cout<<sum;
	return 0;
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值