描述: |
来自星星的都教授除了所有感官比地球人高出七倍,始终容颜不老以外,还拥有一项在地球人看来特别神奇的能力,他会瞬间(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;
}