关闭

不可以!

标签: c++
171人阅读 评论(0) 收藏 举报
分类:

不可以!

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
描述

判断:两个数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

  这题挺水的,就是不确定的选项原来是0,因为0 非正非负。
AC代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std; 
int main()
{
	int f1,f2;
	char str[15],st[15];
	while(~scanf("%s %s",&str,&st))
	{
		f1=1,f2=1;
		if(!(str[0]-'0')||!(st[0]-'0'))
		{
			printf("Signs can't be sure\n");
			continue;
		}
		if(str[0]-'-')
		{
			f1=0;
		}
		if(st[0]-'-')
		{
			f2=0;
		}
		if(f1-f2)
		{
			printf("Signs are opposite\n");
		}
		else
		{
			printf("Signs are not opposot\n");
		}
	}
	return 0;
}

最优代码:

 
#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");
	}
}        


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:235569次
    • 积分:10260
    • 等级:
    • 排名:第1642名
    • 原创:777篇
    • 转载:186篇
    • 译文:1篇
    • 评论:37条
    博客专栏