【小学】三做一年级算术题

【小学】三做一年级算术题

两个一年级小朋友在一起玩游戏,小明给出一堆一位的正整数和运算要求(+、-、*、/、%),小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。

输入:

用逗号分隔的一位正整数序列,及其运算符和等号

输出:

最大数 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

思路

第一想法是先将整行输入为一个字符串,再通过循环提取其中的数字和运算符,然后对数字排序,最后按运算符分类输出计算结果

但再次思考就会发现,其实完全可以在输入时就通过循环直接提取其中的数字和运算符

流程图

【小学】三做一年级算术题_第1张图片

代码

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;
	}
	
} 

你可能感兴趣的:(学习笔记-乐学,算法)