【小学】三做一年级算术题
两个一年级小朋友在一起玩游戏,小明给出一堆一位的正整数和运算要求(+、-、*、/、%),小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。
输入:
用逗号分隔的一位正整数序列,及其运算符和等号
输出:
最大数 op 最小数=结果
样例:
序号 | 测试输入 | 期待的输出 | 额外进程 |
---|---|---|---|
1 | 5,1,1,a,b,2,0,3,+,=5,1,1,a,b,2,0,3,+,=↵ | 5+0=5↵ | 0 |
2 | 精工书院1,5,2,0,/,=↵ | Error!↵ | 0 |
3 | 北理1,7,2,2,5,3,/,=↵ | 7/1=7↵ | 0 |
思路
第一想法是先将整行输入为一个字符串,再通过循环提取其中的数字和运算符,然后对数字排序,最后按运算符分类输出计算结果
但再次思考就会发现,其实完全可以在输入时就通过循环直接提取其中的数字和运算符
流程图
代码
int main ()
{
char dig[10]={0},x,op;
int len=0,M=0,m=10;
do
{
x=getchar();
if(x<='9'&&x>='0') dig[len++] = x-'0';
else if(x=='+'||x=='-'||x=='*'||x=='/'||x=='%') op = x;
}
while(x!='\n');
for(len--;len>=0;len--)
{
M=M<dig[len]?dig[len]:M;
m=m>dig[len]?dig[len]:m;
}
switch(op)
{
case '+':printf("%d+%d=%d\n",M,m,M+m);break;
case '-':printf("%d-%d=%d\n",M,m,M-m);break;
case '*':printf("%d*%d=%d\n",M,m,M*m);break;
case '/':if(m==0) printf("Error!\n");else printf("%d/%d=%d\n",M,m,M/m);break;
case '%':if(m==0) printf("Error!\n");else printf("%d%%%d=%d\n",M,m,M%m);break;
}
}