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

题解-负进制

时间:2020-10-08 18:31:31      阅读:17      评论:0      收藏:0      [点我收藏+]

标签:for   class   十进制   依次   mes   its   负数   line   因此   

负进制

借助于对数字理论的研究,奶牛们打算建立一套计数系统。它们打算建立的计数系统是二进制的,但基数为-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 }

 

题解-负进制

标签:for   class   十进制   依次   mes   its   负数   line   因此   

原文地址:https://www.cnblogs.com/rebirth-death2019/p/13778660.html

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