从逗号中提取数据问题
本帖最后由 宸宸城堡 于 2021-11-8 21:30 编辑小明给出一堆整数和运算要求(+、-、*、/、%),小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。
输入:
用逗号分隔的整数序列,及其运算符和等号
输出:
最大数 op 最小数=结果
说明:本题目应该可以不使用数组就可以完成,关键是如何处理负数和减法。
用例1:
输入:-100,-1,1,100,+,=(回车)
输出:100 + (-100) =0(回车)
用例2:
输入:-20,-10,0,10,20,*,=(回车)
输出:20 * (-20) = -400(回车)
感谢各位大佬!!!! 这题目我也确实没有好办法
#include <stdio.h>
#include <stdbool.h>
#include <ctype.h>
int calc(int a, int b, char op) {
switch(op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
case '%': return a % b;
}
return 0;
}
bool read_number(int *n) {
char ch = getchar();
switch(ch) {
case '+':
ungetc(ch, stdin);
return false;
case '-': {
char temp = getchar();
if(!isdigit(temp)) {
ungetc(temp, stdin);
ungetc(ch, stdin);
return false;
}
ungetc(temp, stdin);
scanf("%d", n);
*n = -*n;
return true;
}
}
ungetc(ch, stdin);
return scanf("%d", n) == 1;
}
int main(void) {
int max = 0, min = 0;
char op;
while(1) {
scanf(",");
int temp;
if(read_number(&temp)) {
if(max < temp) max = temp;
if(min > temp) min = temp;
} else {
scanf("%c,=", &op);
break;
}
}
const char *format = "%d %c %d = %d\n";
if(min < 0) format = "%d %c (%d) = %d\n";
printf(format, max, op, min, calc(max, min, op));
return 0;
}
页:
[1]