从零起步看算法(第十一天 4.16)
//q12 表达式求值
1.首先想到的是先算乘法再算加法
2.编程过程中了解到了一个函数isdigit()//头文件 #include<cctype>
https://blog.csdn.net/liuweiyuxiang/article/details/50850104
3.取后四位,或限制位数的问题,目前积累了两个想法,一个是拆数,另一个是取余。
ac版:
https://blog.csdn.net/Liukairui/article/details/79073235
以节点和标志来初始化,存储,加乘。
仍需领悟
#include<iostream>
#include<string>
#include<algorithm>
#include<cmath>
#include<assert.h>
#include<cctype>//判断字符
using namespace std;
int main(){
long long ans,add,mul;//ans为最后输出值
ans=0;
mul=1;
add=0;
char buf;//一个字符一个字符处理
//string str;
while(scanf("%c",&buf)==1&&buf!=10){//输入的形式
if(isdigit(buf)){//add存数
add=add*10;
add+=buf-'0';
}
if(buf=='+'){
if(mul!=1){//后乘数
mul*=add;
add=0;
ans=ans%10000;
ans+=mul%10000;
ans=ans%10000;
mul=1;
}
else{//前无乘数 简答的加数取余
ans=ans%10000;
ans+=add%10000;
ans=ans%10000;
add=0;
}
}
if(buf=='*'){
mul*=add;
mul=mul%10000;
ans=ans%10000;
add=0;
}
}
if(mul!=1){//以乘法结束
mul*=add;
ans+=mul;
}
else{
ans+=add%10000;
ans=ans%10000;
}
cout<<ans%10000<<endl;
return 0;
}
long long ans,add,mul;//ans为最后输出值
ans=0;
mul=1;
add=0;
char buf;//一个字符一个字符处理
//string str;
while(scanf("%c",&buf)==1&&buf!=10){//输入的形式
if(isdigit(buf)){//add存数
add=add*10;
add+=buf-'0';
}
if(buf=='+'){
if(mul!=1){//后乘数
mul*=add;
add=0;
ans=ans%10000;
ans+=mul%10000;
ans=ans%10000;
mul=1;
}
else{//前无乘数 简答的加数取余
ans=ans%10000;
ans+=add%10000;
ans=ans%10000;
add=0;
}
}
if(buf=='*'){
mul*=add;
mul=mul%10000;
ans=ans%10000;
add=0;
}
}
if(mul!=1){//以乘法结束
mul*=add;
ans+=mul;
}
else{
ans+=add%10000;
ans=ans%10000;
}
cout<<ans%10000<<endl;
return 0;
}