zoukankan      html  css  js  c++  java
  • CSP-J2 2020 题解(Updating)

    T1 . 优秀的拆分

    Written on 2020.11.11

    题目传送门

    Description

    给定 (n) ,求 (n) 的二进制幂分解

    Solution

    不难想到,求 (n) 的二进制幂分解可以转化为表示二进制的问题。

    而对于每一个 (n) ,当 (n) 没有一个合法的二进制幂分解时,当且仅当 (n) 为奇数。

    故有此特判 :

    if(n&1){
    	printf("-1");
    	return 0;
    }
    

    对于一般的 (n) 为偶数的情况,根据位值原理,(倒序)输出 (bit[i]) (当前位) ( imes 2^{i-1})

    Code

    #include<iostream>
    #include<cstdio>
    using namespace std;
    inline void read(int &x){
    	int f=1;
    	char ch=getchar();
    	x=0;
    	while(ch<'0'||ch>'9'){
    		if(ch=='-') f=-1;
    		ch=getchar();
    	}
    	while(ch>='0'&&ch<='9'){
    		x=(x<<3)+(x<<1)+(ch&15);
    		ch=getchar();
    	}
    	x*=f;
    }
    inline void write(int x){
    	if(x<0) putchar('-'),x=-x;
    	if(x>9) write(x/10);
    	putchar(x%10+'0');
    }
    int n;
    int bit[30];
    int main(){
    	int len=0;
    	read(n);
    	if(n&1){
    		printf("-1");
    		return 0;
    	}
    	while(n){
    		bit[++len]=n%2;
    		n/=2;
    	}
    	for(int i=len;i>=1;i--){
    		if(bit[i]){
    			write(bit[i]*(1<<(i-1)));
    			putchar(' ');
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    十三周上机练习
    上机练习
    第十一周作业
    第十一周上机作业
    第十周上机作业
    第九周作业
    第八次作业
    第八次作业
    第六次作业
    第五次作业
  • 原文地址:https://www.cnblogs.com/-pwl/p/13959643.html
Copyright © 2011-2022 走看看