zoukankan      html  css  js  c++  java
  • 【题解】负进制

    负进制

    借助于对数字理论的研究,奶牛们打算建立一套计数系统。它们打算建立的计数系统是二进制的,但基数为-2,而
    不是+2。另它们非常高兴的是,使用-2作为基数表示数字不需要符号位。我们知道进制数每位的权(从右到左)分
    别为1(基数的0次方),基数1,基数2,等等。基数为-2的情况下,每位的权分别为1,-2,4,-8,16,-32,
    ……(从右向左)。因此,从1开始计数依次为:1, 110, 111, 100, 101, 11010, 11011, 11000, 11001
    , 等等。令人惊奇的是,使用基数-2,负数也可以用1和0来表示,而且不需要符号位。例如,从-1开始向下计数
    依次为:11, 10,1101, 1100, 1111, 等等。请你帮助奶牛转换普通十进制数(范围-2,000,000,000…2,000,0
    00,000)到基数为-2的计数系统。

    输入
    Line 1: 一个需要转换的十进制整数

    输出
    Line 1: 一个整数,表示输入整数转换为基数为-2后的结果。
    输入0,仍然输出一个0。

    样例
    输入
    -13
    输出
    110111
    提示
    从右向左读: 11 + 1-2 + 14 + 0-8 +116 + 1-32 = -13


     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 long long sum=0,s[10000],x=0,n;
     4 int main(){
     5     cin>>n;
     6     if(n==0)cout<<0;
     7     else
     8     for(int i=1;i<=2000000;i++){
     9         if(n!=0){
    10             sum++;
    11             s[sum]=abs(n%(-2));//绝对值 
    12             if(n%(-2)==-1){//
    13                 n=n/-2+1;
    14             }else{//
    15                 n/=-2;
    16             }
    17         }else{
    18             break;
    19         }
    20     }
    21     for(int i=sum;i>=1;i--){
    22         if(x!=0)cout<<s[i];
    23         if(!x){
    24             if(s[i]!=0){
    25                 x=1;
    26                 cout<<s[i];
    27             }
    28         }
    29     }
    30     return 0; 
    31 }
  • 相关阅读:
    [方法] 如何做产品功能设计
    js如何去除一个数组中与另一个数组中的值相同的元素
    js 导出Excel2
    js 导出Excel
    CSS3动画
    没有欲望是一种什么样的感觉
    L9-DOM高级应用
    L8-DOM操作应用
    L7-DOM基础
    L6-js定时器的应用
  • 原文地址:https://www.cnblogs.com/rebirth-death2019/p/13778660.html
Copyright © 2011-2022 走看看