码迷,mamicode.com
首页 > 其他好文 > 详细

P1100 高低位交换

时间:2020-05-08 10:16:10      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:lld   十六   www   inf   namespace   tmp   map   lan   ++   

大致题意:

  • 将n的二进制数求出后,前十六位与后十六位互换得到一个新的二进制数,并将它转换为十进制。

基本思路:

  • 先求n的二进制,
  • 交换高低位,
  • 转十进制,
  • 输出。

关于进制的相互转换可以看看我的 这一篇博客<<戳 ,里面有写。

Code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <list>
using namespace std;
#define R read()
#define GC getchar()
#define ll long long
#define ull unsigned long long
#define INF 0x7fffffff
#define LLINF 0x7fffffffffffffff
ll read(){
    ll s=0,f=1;
    char c=GC;
    while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-f;c=GC;}
    while(c>=‘0‘&&c<=‘9‘){s=s*10+c-‘0‘;c=GC;}
    return s*f;
}
ll n,m;//好像不用long long也没问题,我为了保险就打上了qwq
ll t=1;
ll tmp[100],tot;
int main(){
    n=R;
    while(n){//10进制转2进制
        tmp[++tot]=n%2;
        n/=2;
    }
    for(int i=1,j=32;i<=16;++i,--j){//反过来,因为每次取模的数都应该从后往前放,但是并不知道要放多少个,所以就正着进来啦
        swap(tmp[i],tmp[j]);
    }
    for(int i=1,j=17;i<=16;++i,++j){//高低位交换
        swap(tmp[i],tmp[j]);
    }
    for(ll i=32;i>=1;--i){//2进制转10进制
        m+=tmp[i]*t;
        t*=2;
    }
    printf("%lld",m);
    return 0;
}

P1100 高低位交换

标签:lld   十六   www   inf   namespace   tmp   map   lan   ++   

原文地址:https://www.cnblogs.com/FUXyao/p/12848407.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!