上海计算机学会2020年5月月赛C++乙组T1负二进制
 发布时间 
 阅读量: 
 阅读量 
负二进制以 −2 作为基数,其特点包括不论正负任何整数都有唯一表示且无需使用负号。通过递归方法可以将其转换为该进制表示。例如:
(−2)^2 + (−2)^1 + (−2)^0 = 3
(−8) + 0 + (−2) + 3 = −9
6 的表示为 6 = (−2)^4 + (−2)^3 + (−2)^1
给定一个十进制整数 n,需输出其对应的 −2 进制字符串形式。例如:
输入:-13
输出:11011
代码实现基于递归函数 f(x),处理每一位并构造结果字符串。
题目背景
除了二进制之外, −2 同样能够充当进制的基数, 并且有人提出了一种被称为负二进制的新表示方法。这种特殊进制的优势在于……
- 不论正负,任何整数都有且只有一种表示方法;
 - 表示负数不用负号 
- 
题目描述
负二进制以 −2 作为基数,从最低位开始,每位的权重依次为 1,−2, 4,−8,16,…,例如:
(111)−2=(−2)2+(−2)1+(−2)0=3
(1011)−2=(−2)3+(−2)1+(−2)0=−9
(11010)−2=(−2)4+(−2)3+(−2)1=6
请根据给定的十进制整数 n,在十进制形式下计算其对应的负二进制表示,并确保结果中没有前导零。
输入格式
单个整数:表示 n。
输出格式
单个字符串:表示 n 的负二进制表示。
数据范围
- 对于 50% 的数据,−100≤n≤100;
 - 对于 100% 的数据,−109≤n≤109。
 
样例数据
输入:
-13
输出:
110111
解析:
 #include <bits/stdc++.h>
    
 using namespace std;
    
 int a[1005];
    
  
    
 void f(int x) {//递归输出最后一位
    
     if (x == 0) {
    
     return;
    
     }
    
     f((x - abs(x % (-2))) / (-2));//减模-2再除-2
    
     cout << abs(x % (-2));//模-2
    
 }
    
  
    
 int main() {
    
     int n;
    
     cin >> n;
    
     if (n == 0) {
    
     cout << '0';
    
     } else {
    
     f(n);
    
     }
    
     return 0;
    
 }
        全部评论 (0)
 还没有任何评论哟~ 
