明码--蓝桥杯

按照每行两个单词输出数字的二进制就行了
其中就是负数的二进制转换可能有人不知道以-1为例
先求出-1的相反数的二进制:0000 0001->(取反)1111 1110->(加一)1111 1111(即为-1的二进制)。
其次就是得到的二进制要多打印几位(八位即可),不然很难看出来内容。

其实完全可以用c++库来解决,特别方便记录下来学习学习。

#include <iostream>
#include <bitset>
using namespace std;
int main()
{
	int n, m;
	while (cin >> n >> m)
	{
		bitset<8> s;//bitsset<8> t(n)也可以直接将t赋值为n,8是指输出8位的二进制
		s = n;
		cout << s.to_string();
		s = m;
		cout << s.to_string() << '\n';
	}
	return 0;
}

当然也可以自己转(写的很乱应该没有参考价值):

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string TWO(int num) {
	string res, ans = "00000000";
	bool flag = false;
	int k = 0;
	if (num < 0) {
		num = -num;
		flag = true;
	}
	do {
		if (num % 2 == 0) res.push_back('0');
		else res.push_back('1');
		num = num >> 1;
	} while (num);
	reverse(res.begin(), res.end());//翻转函数将res翻转

	int len1 = res.size() - 1, len2 = ans.size() - 1;
	for (int i = 0; i < res.size(); i++) ans[len2 - i] = res[len1 - i];//赋给另一个字符串补8位
	
	if (flag) {//如果是负数就取反并加一
		for (int i = 0; i < ans.size(); i++) {//取反
			if (ans[i] == '1') ans[i] = '0';
			else ans[i] = '1';
		}
		ans[ans.size() - 1] += 1;//加一
		for (int i = ans.size() - 1; i > 0; i--) {//进位
			if (ans[i] == '2') {
				ans[i] = '0';
				ans[i - 1] += 1;
			}
			else break;
		}
		//if (ans[0] == '2') ans[0] = '0';
	}
	return ans;
}
void print(string s) {//方便观察
	for (int i = 0; i < s.size(); i++) {
		if (s[i] == '1') cout << s[i];
		else cout << ' ';
	}
}
int main() {
	for (int i = 0; i < 10; i++) {
		for (int j = 0; j < 16; j++) {
			string s1,s2;
			int num1, num2;
			cin >> num1 >> num2;
			s1 = TWO(num1);
			//cout << s1;
			print(s1);
			s2 = TWO(num2);
			//cout << s2 << '\n';
			print(s2); cout << '\n';
		}	
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值