heitu2019
heitu2019
2020-09-17 22:11
采纳率: 100%
浏览 135

如何在不使用判断、函数等方法的情况下,输入两个整数,用bool比较两个整数的大小,并打印出结果?

我是C/C++初学者,刚入门学的知识很少。学到教学课堂有这么一题,就是用初学的知识来比较两个整数a,b的大小。提示有用除法和bool。0*任何数为0,1*任何数为1. 考虑到如果a大于b的话int a除以int b结果为1反之为0.但是我初学想了好久还是不明白不用判断怎么去构筑这个程序。“输入两个整数,并显示大的数和小的数的值”。求求各位大佬指点下萌新!感激不尽(在C/C++控制台上的)。教学的老师说让自己思考,不可能说答案的。我实在不明白怎么做,十分难受,求解

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • caozhy
    已采纳
    #include <stdio.h>
    
    int main()
    {
    int a;
    int b;
    scanf("%d%d", &a, &b);
    char * ch = "><=";  
    int result = (((unsigned)(a - b)) / (1 << 31)) + (int)(a == b) * 2;
    printf("%c\n", ch[result]);
    return 0;
    }
    

    或者

    int a;
    int b;
    scanf("%d%d", &a, &b);
    char * ch = "><=";  
    int result = ((a / b) == 0) + (int)(a == b) * 2;
    printf("%c\n", ch[result]);
    

    下面是不用指针不用==的方法(scanf的指针另当别论,你也可以换成cin)

    int a;
    int b;
    scanf("%d%d", &a, &b);
    char ch[] = "=><";  
    int result = (((unsigned)(a - b)) / (1 << 31)) + (((unsigned)(a - b - 0)) / (1 << 31)) + (((unsigned)(0 - a + b)) / (1 << 31)) ;
    printf("%c\n", ch[result]);
    

    问题解决的话,请点下采纳。

    点赞 评论
  • zzz3265
    Yofoo 2020-09-18 17:25

    如果a>=b 那么 a/b >=1 也就是 (bool)(a/b) == !false
    如果a<b 那么 a/b <1 也就是 (bool)(a/b) == false

    另外考虑下b为0的情况

    回复heitu2019: 我已经说了最关键的, 后面的稍微构造下, 论坛评论出问题了, 没法用

        int     a,b,mx,mn;
    
        a = 5;
        b = 10;
        mx=(int)(bool)(a/b)*a+(int)(bool)(b/a)*b;
        mn=(int)(bool)(b/a)*a+(int)(bool)(a/b)*b;
    
    
    点赞 评论

相关推荐