解题思路:
    本题目需要注意如下事项:

  1. 使用unsigned int 类型,不适用的话会产生错误

  2. 使用while循环做位数判断控制,理论上n多大都可以的,因为循环可以进行判重,n>=32可以通过取余数的方式把其控制在32位以内

  3. 如何快速查找到unsigned int 最大的一位数,可以直接unsigned ing big_int =(1<<31)这样的操作找到最大的一位数,不需要你去背32进制,也不需要你去背实际的数字,由于1本身是1位,所以直接左移31位就可以到达32位最大值的位置。

  4. 通过一个判断n进行判断n是否左移还是右移动,n=0时不需要移动


参考代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
 unsigned int Fvalue= (1<<31);    //unsigned int 最高位为1
 unsigned int value;              //输入的value值
 int n;
 cin>>value>>n;
 if(n>0){
  //right
  while(n--){
   if(value&1){    //当value的第低位有值的时候进行操作
    value>>=1;        //右移操作
    value|=Fvalue;     //或操作
   }else{
    value>>=1;    //地位没有值的时候,直接移动就可以了
   }
  }
 }else if(n<0){    //与上文反过来即可,注意此时n=(-n)的操作取整数,n=0时不进入判断
  //left 
  n=(-n);
  while(n--){
   if(value&Fvalue){    当value的最高位有值的时候
    value<<=1;
    value|=1;
   }else{
    value<<=1;
   }
  } 
 }
 cout<<value<<endl; //输出操作过后的value值
 return 0;
}  
//dotcpp - 1775


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论