|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 宸宸城堡 于 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;
- }
复制代码
|
|