如何拯救暑假中的孩子于水火之中?

消失了一年的作者回来了,十分高兴能够再次见面。从今天开始,笔者争取每天都过一道比较有趣的题。ヾ(•ω•`)o

今天的题目: 暑假到了,被害人的数学老师给他布置了1万道数学计算题目,面对巨大的任务量,被害人几度哭晕在厕所,最后他决定采用学习的编程知识来完成这1万道题目,已知数学老师布置的题目都是一些不带括号的四则运算,例如123+234* 4+56/8=? 23-12-12*3=?由于被害人还没学习过小数,所以题目中的除法都是可以整除的。

-分析
其实意思还挺直观的了,就是要计算一个给定表达式(?)的值。那么具体的步骤是什么呢?

-步骤
笔者是这么想的。假设如果有这么两个列表。

  • 一个存储所有运算的数字,一个存储所有的运算符。
  • 根据运算符处理所有的数字,乘除法有限。
  • 有一个变量记录着最后所有的和。

-代码实现

  • C++版
#include<iostream>
#include<iomanip>
#include<cmath>
#include<cstring>
using namespace std;
int main(){
	char a1[100]={},opstor[100]={};//创建两个列表,一个来存储表达式,一个来存储运算符号
	int a[100]={}; //专门用来存储数字的列表。
	int index=0,k=0,k1=0;
	cin>>a1;
	opstor[0]='+';//这里笔者假设头一个数是正数
	for (int i=0;i<=strlen(a1)+1;i++) {//循环,遍历表达式里的所有元素
		if (a1[i]=='*'||a1[i]=='/' || a1[i]=='+' || a1[i]=='-') {	//如果是新的运算符...
			opstor[k+1]=a1[i]; //更新运算符列表
			a[k]=a[k]/pow(10,3-k1+1);//数字从原本的升位将回来,后面会提到。
			k++;//存储数字列表中的新的数字
			k1=0;
			
		}
		else if(a1[i]!='=' && a1[i]!=' '){
			a[k]+=(a1[i]-48)*pow(10,3-k1);//在这里笔者为了将元素们成一个数字,将它们乘了一个数,这里假设不大于1000,后面会把多余的0除掉
			k1++;//位数改变
		}
		else if (a1[i]=='=') {		//等于号就结束了...
			a[k]=a[k]/pow(10,3-k1+1);   //数字进行最后一轮更新
			k++;			//数字和运算符数量更新
			k1=0;
			break;			//停止运行.
		}
	}
	int x=0;
	for (int i=0;i<k;i++) {//在这个循环中,为了保证乘除的优先性,只算了乘除
		if (opstor[i+1]=='*') {
			a[i]=a[i]*a[i+1];
			a[i+1]=0;//后面会加起来,所以要剔除多余的值
			opstor[i+1]=opstor[i];
		}
		else if (opstor[i+1]=='/') {
			a[i]=a[i]/a[i+1];
			a[i+1]=0;
			opstor[i+1]=opstor[i];
		}
	}
	for (int i=0;i<k;i++) {
		if (opstor[i]=='-') {	//如果是减法就减掉数字
			x-=a[i];
		}
		else {	//其余就是加法
			x+=a[i];
		}
	}
	cout<<x<<endl;		//输出答案
	return 0;
}

-结果
在这里插入图片描述
在这里插入图片描述
这些样例测试都通过了,各位读者也可以自己试验一下,有问题可以跟我说。
-结语
其实这是一个比较简单的列表题吧,感兴趣的可以用栈或者结构体写一写。另外祝读者暑假愉快。笔者可能两天后会更新(不确定)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值