计算器加减乘除优先级算法_简单计算器
简单计算器
四种运算符的优先级相同,按从左到右的顺序计模拟简单运算器的⼯作。假设计算器只能进⾏加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同
算。
输⼊格式:
输⼊在⼀⾏中给出⼀个四则运算算式,没有空格,且⾄少有⼀个操作数。遇等号”=”说明输⼊结束。
输出格式:
在⼀⾏中输出算式的运算结果,或者如果除法分母为0或有⾮法运算符,则输出错误信息“ERROR”。
输⼊样例:
1+2*10-10/2=
输出样例:
10
#include<stdio.h>
int main(void){
char ch;
int b,sum = 0,flag = 0;
scanf("%d",&sum);
while(scanf("%c",&ch)){
scanf("%d",&b);
if(ch == '+')
sum+=b;
网页计算器html代码else if(ch=='-')
sum-=b;
else if(ch=='*')
sum*=b;
else if(ch=='/'){
if(b==0){
flag = 1;
break;
}
else
sum/=b;
}
else if(ch=='=')
break;
else{
flag = 1;
break;
}
}
if(flag)
printf("ERRORn");
else
printf("%dn",sum);
return 0;
}
思考:四种运算符造成if else语句过多,理应改为switch case,但修改后提交测试时运算超时
故在代码的具体实现上,此处差距并不会影响算法本⾝时间复杂度,但由于⼆者元运算速度不同,造成运算超时。具体深层原因尚不清楚,需待请教⽼师。
分割线--
另附原错误码(卑微)
int main(void)
{
char ch;
int b,sum=0,flag=0;
scanf("%d",&sum);
while (scanf("%c",&ch)){
scanf("%d",&b);
}
switch (ch) {
case '+':sum+=b;
case '-':sum-=b;
case '*':sum*=b;
case '/':{if (b!=0)
sum/=b;
else flag=1;
break;}
case '=': break;
default:flag=1;
break;
}
if (flag)
printf("ERRORn");
else printf("%dn",sum);
return 0;
}