此题会做,但是看不懂优秀代码中的解法和一些细节
PS:万能头文件
#include<bits/stdc++.h>
using namespace std;
不可以!
描述
x、y保证在int范围内。
输出每组数据输出占一行。
如果两个数是一正一负,输出"Signs are opposite"
如果是同为正或同为负,输出"Signs are not opposot"
如果无法确定,输出"Signs can't be sure"
输出不包括引号
样例输入
判断:两个数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)
是什么意思?