Problem : 模拟简单计算器
Time Limit: 1 Sec Memory Limit: 64 MB
Submit: 4325 Solved: 1524
Description
程序模拟简单运算器的工作:输入一个算式(没有空格),遇到‘=’号说明输入结束,输出结果。假设计算器只能进行加、减、乘、除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。例如,输入“1+2*10-10/2"后结果为10。
Input
输入一个以等号结束的四则运算式(不含括号)
Output
输出计算结果
Sample Input
1+2*10-10/2=
1+3*5/2-7=
Sample Output
10
3
HINT
可以说我开始做题目是想复杂了。想到应该是一串打入,但是一串打入需要字符串数组,那么涉及字符串中变数字,atoi函数(#include <stdlib.h>)可以将字符变整形【记一下吧没准期末用到】,但是是一整个字符串,碰到非数字或者‘/0’停止,所以也很难实现。然后搜了一下,发现其实scanf 以及字符输入可以同一行,最后一个回车分别读进去就可以了。
在写代码的过程中,出现了问题(问题代码):
#include<stdio.h>
#include<string.h>
int main(void)
{
int sum,a,b;
char c;
while(scanf("%d",&a)!=EOF)
{
sum=a;
while(scanf("%c",c)!=EOF) // 这组代码是没有输出的,个人猜测是两个scanf连着的问题。虽然一个是int一个是char。
{
scanf("%d",&b);
if(c=='+')
sum=sum+b;
else if(c=='-')
sum=sum-b;
else if(c=='*')
sum=sum*b;
else if(c=='/')
sum=sum/b;
else if(c=='=')
break;
}
printf("%d\n",sum);
}
return 0;
}
修改的话换一种输入字符,gets可以,getchar对单个也可以,反正这题是单个。
AC代码:
#include<stdio.h>
#include<string.h>
int main(void)
{
int sum,a,b;
char c;
while(scanf("%d",&a)!=EOF)
{
sum=a;
while((c=getchar())!='=')
{
scanf("%d",&b);
if(c=='+')
sum=sum+b;
else if(c=='-')
sum=sum-b;
else if(c=='*')
sum=sum*b;
else if(c=='/')
sum=sum/b;
}
printf("%d\n",sum);
}
return 0;
}