#二进制加减
———例题—
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 数字,可以用来进行二进制数的储存