华为8

您所在的位置:网站首页 九头鸟猜一个数字 华为8

华为8

2023-09-10 02:14| 来源: 网络整理| 查看: 265

华为8.26第一题:位转换:没有任何技巧,纯c++代码 * 题目描述:题目中提示,每个数字的二进制为32bit) * 1.输入n个无符号整数 * 2.给每个数字增加干扰措施。 * 2.1 干扰1:让每个整数的二进制位置上的数字交换,即(2*i)与(2*i+1)交换,i=0:15。以下讨论说的都是二进制数。 * 2.2 干扰2:假设三个数a,b,c,a(XXXXXXXXXXa2a1)的最后两位弹出a1,a2;a1,a2进入b的头,同时b的最后两位b1b2弹出,此时b变为(a2a1XXXXXXXXXXXX),c同理,变为(b2b1XXXXXXXXXXXX),将c的尾巴c1c2弹入a的头,a变为(c2c1XXXXXXXXXXXXX)。 * 最终效果:(干扰2:再把每个数向右移动两位,溢出的部分依次像下一个整数的最高位移动,末尾的右移两位到第一个数的最高两位) * a(XXXXXXXXXXXXa2a1)->(c2c1XXXXXXXXXXXXX); * b(XXXXXXXXXXXXb2b1)->(a2a1XXXXXXXXXXXX); * c(XXXXXXXXXXXXc2c1)->(b2b1XXXXXXXXXXXX); * 。。。。。。应该叙述清楚了。倘若只有一个数a,这个应该好分析 * 3.输出每个***扰后的数字(十进制的,同空格隔开)

主要思路:

按照题目要求来,本题的思路是用unsigned int转二进制,再转字符串做翻转进行相应操作 后续这种转换,我感觉要直接用移位来,这是c++的优势

小的tricks:我之前也遇到过字符串输入带空格。。。用getline(cin,s)。。。 在这里插入图片描述

#include #include #include #include #include using namespace std; // 将数转换为32位数的二进制 string zhuanhuan1(unsigned int a) { string temp; int t = 0; for (int i = 0; i for (int i = 0; i s.pop_back(); s.pop_back(); reverse(s.begin(), s.end()); s.push_back(l1); s.push_back(l2); reverse(s.begin(), s.end()); } int main() { // 输入 unsigned int temp; vector arr; while (cin >> temp) { arr.push_back(temp); } vector str(arr.size()); // 转换为二进制并增加干扰1 for (int i = 0; i for (int i = 1; i arr[i] = zhuanhuan2(str[i]); cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3