• TYVJ P1022 进制转换 Label:坑


    背景

    太原成成中学第3次模拟赛 第2道

    描述

    对于十进制整数N,试求其-2进制表示。
    例如,因为 1*1 + 1*-2 + 1*4 + 0*-8 +1*16 + 1*-32 = -13 ,所以(-13)_10 = (110111)_-2。

    输入格式

    一个整数,代表要转换的十进制数。

    输出格式

    一个整数,代表N的-2进制表示。

    测试样例1

    输入

    -13

    输出

    110111

    备注

    |N| <= 2000000000
    Vivian Snow
    广东汕头聿怀初级中学NOIp第一次训练用题

    代码

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 long long n;
     7 int p,ans[35];
     8 int main(){
     9     scanf("%lld",&n);
    10     for(long long i=1;p<=32;i*=-2,p++){
    11         if((n/i)&1){
    12             ans[p]=1;
    13             n-=i;
    14         }
    15     }
    16     while(!ans[p]&&p!=0) p--;
    17     for(int i=p;i>=0;i--){
    18         printf("%d",ans[i]);
    19     }
    20     puts("");
    21     return 0;
    22 }

    思路:和平常进制转换一样。但是:

    如果用普通的%或者mod结果不对,为什么?因为它不是往下取第一个能被-2整除的数,而是把此数对2取模,然后依前者符号决定。所以,要手工用“往下取第一个能被-2整除的数”作为求余数的方法。

    从低位开始,用n除以该位的进制数,看结果是否为奇数,注意要开longlong

    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
  • 相关阅读:
    jQuery检测滚动条(scroll)是否到达底部
    sql group by
    hbm.xml 详解总结
    net.sf.json 时间格式的转化
    经典SQL语句大全
    HashTable
    in与exist , not in与not exist 的区别
    网页布局常用的一些命名规则和书写
    什么是SOA?
    sql之left join、right join、inner join的区别
  • 原文地址:https://www.cnblogs.com/radiumlrb/p/5792999.html
Copyright © 2020-2023  润新知