• poj1023 (binary)


             给你一个数可能是正数,也可能是负数。求其给定的二进制形式,即事先规定某一位是正值还是负值;初始化时,若给的是负值,只要求其相反数,同时也把题目的要求取反,即p改成n,n改成p;然后根据二进制的性质,如果给的数k是奇数,则其二进制形式的最低位一定是1(不管其是p位还是n位),所以先对k-1或是k+1,然后右移一位,同样判断是偶数还是奇数,是偶数的话最低位就为零了,这时只要对k右移一位即可;这样一直下去,如果在给定二进制长度内不能使k变为0,则说明impossible。否则输出res[]即可;

    网上的代码;

    #include<cstdlib>
    #include<iostream>
    using namespace std;
    
    int main(){
        int N;
        int n;
        char pn[65] = {'\0'};
        char ans[65] = {'\0'};
        long long y;
        unsigned long long x;
        
        cin >> N;
    
        for(int i = 0 ; i < N; i ++){
            
            cin>>n>>pn>>y;
            x = y;
            if(y < 0){                
                x = -x;    
                
                for(int j = 0; j < n; j ++)    
    if(pn[j] == 'n') pn[j] = 'p'; else pn[j] = 'n'; } for(int j = n - 1; j >= 0; j --){ if(x&1 == 1){ ans[j] = '1'; if (pn[j] == 'p') x = x - 1; else x = x + 1; x = x >> 1; } else{ ans[j] = '0'; x = x >> 1; } } if(x != 0) cout<<"Impossible\n"; else cout<<ans<<endl; memset(ans, '\0', sizeof(char)*65); } return 0; }
  • 相关阅读:
    NOJ-1581 筷子 (线性DP)
    UVA-242 Stamps and Envelope Size (DP)
    POJ 1860 (SPFA判断正环)
    POJ 3268 最短路水题
    STL----priority_queue
    STL----unique
    POJ 2031(最小生成树Kruskal算法+几何判断)
    POJ 3468(线段树区间修改+区间求和)
    学习线段树
    POJ 1251(最小生成树裸题)
  • 原文地址:https://www.cnblogs.com/orangeblog/p/2457339.html
Copyright © 2020-2023  润新知