优秀代码看不懂


此题会做,但是看不懂优秀代码中的解法和一些细节

PS:万能头文件

#include<bits/stdc++.h>
using namespace std;

不可以!

描述

判断:两个数x、y的正负性。

要求:不可以使用比较运算符,即"<",">","<=",">=","==","!="

输入有多组数据,每组数据占一行,每一行两个数x,y。
x、y保证在int范围内。
输出每组数据输出占一行。
如果两个数是一正一负,输出"Signs are opposite"
如果是同为正或同为负,输出"Signs are not opposot"
如果无法确定,输出"Signs can't be sure"
输出不包括引号
样例输入
1 1
-1 1
样例输出
Signs are not opposot
Signs are opposite


你的答案:

 
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int x,y,a,b;
    while(scanf("%d%d",&x,&y)!=EOF)
    {
       // cin>>x>>y;
        a=abs(x);
        b=abs(y);
        if(x&&y)
        {
        if(a-x&&b-y)//两个数都是一,即两个数都为负数
            cout<<"Signs are not opposot"<<endl;
        else if(!(a-x||b-y))//要求两个数都为0,即两个数都是正数
            cout<<"Signs are not opposot"<<endl;
        else cout<<"Signs are opposite"<<endl;
        }
        else cout<<"Signs can't be sure"<<endl;
    }
    return 0;
}
        

注意不能使用while(1),是死循环死循环死循环

优秀代码:

#include<stdio.h>
int main()
{
	int a,b,c;
	while(~scanf("%d%d",&a,&b))
	{
		c=((a>>31)&1)+((b>>31)&1);
		if((!a)||(!b))printf("Signs can't be sure\n");
		else printf("Signs are %s\n",c&1?"opposite":"not opposot");
	}
}        

看不懂它的解法

看不懂

~scanf("%d%d",&a,&b)

是什么意思?

看不懂

c=((a>>31)&1)+((b>>31)&1)
是什么意思?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值