ACM数学专题: 二进制

#二进制加减
———例题
ACM数学专题: 二进制
计算两个二进制数的和或差。
输入

输入由两个二进制数和一个运算符组成,二进制数和运算符之间用一个空格分隔,格式如下:
num1 op num2
其中num1和num2为要参与运算的二进制数,二进制数只可能是大于零的无符号整数,且num1>=num2,op为运算符,运算符只可 能取+或-;当num1和num2的长度不同时,在长度短的数的左侧补零,比如 1000 - 1

样例输入
1011 + 1
样例输出
1100

#include <iostream>
#include <cstring>
#include <bitset>

using namespace std;

int str_to_num(string str) {
	//**二进制转换** 
	int len = str.length();   
	int number = 0;
	for(int i = 0; i < len; ++i) {
		number = number * 2 + (str[i] - '0');
	}
	return number;
}

int main(void) {
	int result;
	string number1,number2;
	char ch;
	cin >> number1 >> ch >> number2;
	int a = str_to_num(number1);
	int b = str_to_num(number2);
	if(ch == '+')
		result = a + b;
	if(ch == '-')
		result = a - b;
	if(a == 0 && b == 0) {
		cout << "000";
		return 0;
	}
//**bitset 函数  十进制直转二进制。**
	bitset<64> bit(result);
	register int index=63;                                         **// register 新加特性---加速**
	for(; index >= 0 && bit[index] == 0; --index) { }; //**找到非零的起始数**
	//输出二进制数
	for(; index >= 0 ; --index) {
		cout << bit[index];
	}
	cout << endl;
	return 0;
}

简单介绍下此题思路:
//注意这题的二进制数不能以数字的形式输入,要定义为字符串,具体why,自己按着数字定义,得不出结果时候自然明白!!
实质上就是建立个模块,进行二进制的转换,将二进制转为十进制,再将得到的结果转换为二进制
其中运用到c++中 ,bit为一个类似于一个数组,但只储存 0 1 数字,可以用来进行二进制数的储存

猜你喜欢

转载自blog.csdn.net/BUN_P/article/details/103287333