外星人比数的大小

描述:

来自星星的都教授除了所有感官比地球人高出七倍,始终容颜不老以外,还拥有一项在地球人看来特别神奇的能力,他会瞬间(0.00000000000000000000001s以内)按照他的规则比较地球人熟悉的两个十进制数字的大小,他比较的规则如下:

 

1、将要比较的两个数字分别转换成二进制数字;

 

2、计算两个二进制数字中1的个数,个数多的数字为两者中的大者;

 

3、负数按照其绝对值进行比较;

 

请利用地球人发明的计算机程序逼近都教授的特异功能,实现时可以有以下约束:

 

1、输入数据为范围在-32768到32768(地球人的十进制世界)之间的任意两个数字;

 

2、如果经过比较后2个数相等,输出为0,如果不相等,输出最大值。如果输入非法,输出-1。

 

运行时间限制: 无限制
内存限制: 无限制
输入:

待比较的2个数。

输出:

按照比较原则,输出最大的值

样例输入:
-30
20
样例输出:
-30

#include<iostream> 
#include <BITSET> 
using namespace std;      
int main()   
{   

    int num1,num2;
	unsigned int abs_num1,abs_num2;   
    cout<<"请输入第一个整数:";   
    cin>>num1; 
	cout<<"请输入第二个整数:";   
    cin>>num2; 
    abs_num1=abs(num1);
	abs_num2=abs(num2);	

	if(abs_num1<=32768)   
	{
		bitset <16> dec1(abs_num1);
		bitset <16> dec2(abs_num2);

		cout<<num1<<"的二进制形式为:"<<dec1<<endl;   
		cout<<num2<<"的二进制形式为:"<<dec2<<endl; 
		
		if(dec1.count()==dec2.count())     //1的个数相同,输出0
			
			cout<<0<<endl;
		
		else 
		{
			cout<<"最大的数:"<<endl;       
			if(dec1.count()>dec2.count())    //1的个数不同,输出个数多的那个数
				cout<<num1<<endl;
			else cout<<num2<<endl;
		}
	}

	else 
		cout<<endl<<"非法输入: "<<-1<<endl;
   
    return 0;   
}  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值