题目描述

给定一个整数 n(0≤n≤10100)、将 n 的 334 位二进制表示形式(不包括开头可能的值为 0 的位,n=0 表示为 1 位 0)前后倒置,输出倒置后的二进制数对应的整数。

例如:n=10,其二进制表示为 (330 个 0)1010,倒置后为 0101,对应输出就是 5。

Input

第 1 行:一个整数 T (1≤T≤10) 为问题数。

接下来共 T 行整数,对应每个问题有 1 行,表示 n。

Output

对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等)。

然后对应每个问题在一行中输出结果。


 #include <stdio.h>
#include <stdlib.h>
#define END 10
void init(int *n)
{
char c;int i=;
while((c=getchar())!='\n')
{
n[i]=c-'';
i++;
}
n[i]=END;
}//用getchar()将大整数逐位读入数组,以换行符为结束标志
void multiout(int* out)//将数组表示的整数*2
{
int *p=out,carry,plus=;
while()
{
if(*p==-)//乘法结束
{
if(p-out==)
{
*p=;
return;
}
else if(plus==)
*p=plus;
return;
}
carry=*p*+plus; 原位置*2+进位
*p=carry%;    
plus=carry/;
p++;
} }
int addout(int* out,int get)
{
int* p=out;
if(get==) return; else
{ *p=*p+;
while(*p==)
{
*p=;
(*(++p))++;
}
}//46-51行其实不需要,任何数×2之后,各位必定是偶数,加1不会引起进位 } int main()
{
int cas;scanf("%d\n",&cas);
for(int m=;m<cas;m++)
{
int BIGINT[],bin[],pos=,binpos;
init(BIGINT);//读入整数
     //以下开始求整数的二进制形式,并存放在二进制数组中,显然,存放的时候已经是倒序了。
       //pos是整数数组的最高位,binpos记录二进制数组何时结束
       //以整数5432为例
for(binpos=;BIGINT[pos]!=END;binpos++) //一直计算到整数为0(pos达到END处) {
int rmd=,divd;             //
for(int i=pos;BIGINT[i]!=END;i++)  // i=0         i=1        i=2     i=3
{                     //
divd=rmd*+BIGINT[i];      // divd=5        divd=14     divd=3   divd=12
rmd=divd%;             // rmd=5除以2余1    rmd=0      rmd=1    rmd=0
BIGINT[i]=divd/;         // 原5的位置除2后为2  原4位置为7    原3位置为1  原2位置为6
}                     //可以看到,一次运算,5432除2得2716,余0,将0存入二进制数组,并更新binpos位置
bin[binpos]=rmd;            //
if(BIGINT[pos]==) pos++;     //2716/2=1358,1358/2=678; 此时BIGINT[pos]=0,pos更新,下次计算时,便从6开始了。
}                        //
bin[binpos]=END;              //标记二进制数组结束位置
int out[],ppos=;out[]=bin[];
for(int i=;i<;i++) out[i]=-;
for(int i=;bin[i]!=END;i++)      //二进制转十进制,从最高位开始*2+后一位,注意这个数组是倒序了的
{
multiout(out);
addout(out,bin[i]);
}
for(;out[ppos+]!=-;ppos++); printf("case #%d:\n",m);
for(ppos;ppos>=;ppos--)
printf("%d",out[ppos]);
printf("\n"); }
return 0; }

具体分析看注释。

这题应该算是一个大数的题吧,long long类型最大值在1018,因此用数组保存数据。

EOJ 3031 二进制倒置的更多相关文章

  1. OJ题解记录计划

    容错声明: ①题目选自https://acm.ecnu.edu.cn/,不再检查题目删改情况 ②所有代码仅代表个人AC提交,不保证解法无误 E0001  A+B Problem First AC: 2 ...

  2. EOJ Monthly 2019.2 题解(B、D、F)

    EOJ Monthly 2019.2 题解(B.D.F) 官方题解:https://acm.ecnu.edu.cn/blog/entry/320/ B. 解题 单测试点时限: 2.0 秒 内存限制:  ...

  3. 二进制加法Java实现

    二进制整数的Java实现 任意两个二进制数(不论在什么位置)相加,只可能出现4种情况.它们是: 0+0=0 1+0=0+1=1 1+1=10=0+向高一位的进位1 1+1+1=11=1+向高一位的进位 ...

  4. linux二进制/十六进制日志文件如何查看和编辑

    使用cat查看二进制,显示乱码 [root@localhost ~]# cat /var/log/wtmp ~~~reboot3.10.0-514.el7.x86_64 �YO#5~~~runleve ...

  5. # Leetcode 67:Add Binary(二进制求和)

    Leetcode 67:Add Binary(二进制求和) (python.java) Given two binary strings, return their sum (also a binar ...

  6. 使用struct处理二进制

    有的时候需要用python处理二进制数据,比如,存取文件.socket操作时.这时候,可以使用python的struct模块来完成. struct模块中最重要的三个函数是pack(), unpack( ...

  7. 如何开启MySQL 5.7.12 的二进制日志

    1. 打开/etc下的my.cnf文件 2. 编辑它,添加内容: log_bin=binary-log   #二进制日志的文件名 server_id=1  #必须指定server_id,这是MySQL ...

  8. 【.net 深呼吸】使用二进制格式来压缩XML文档

    在相当多的情况下,咱们写入XML文件默认是使用文本格式来写入的,如果XML内容是通过网络传输,或者希望节省空间,特别是对于XML文档较大的情况,是得考虑尽可能地压缩XML文件的大小. XmlDicti ...

  9. Javascript的二进制数据处理学习 ——nodejs环境和浏览器环境分别分析

    以前用JavaScript主要是处理常规的数字.字符串.数组对象等数据,基本没有试过用JavaScript处理二进制数据块,最近的项目中涉及到这方面的东西,就花一段时间学了下这方面的API,在此总结一 ...

随机推荐

  1. 前端编码规范(2)HTML 规范

    文档类型 推荐使用 HTML5 的文档类型申明: <!DOCTYPE html> (建议使用 text/html 格式的 HTML.避免使用 XHTML.XHTML 以及它的属性,比如 a ...

  2. Linux各发行版配置总结

    Ubuntu 14.04(该版本下亲测好用) 1.修改开机启动项和默认启动项 sudo gedit /boot/grub/grub.cfg(修改前最好备份一个) 2.登陆界面图片的修改 /usr/sh ...

  3. css3基础篇三

    CSS3 文本阴影 在 CSS3 中,text-shadow 可向文本应用阴影. 您能够规定水平阴影.垂直阴影.模糊距离,以及阴影的颜色: 实例 向标题添加阴影: h1 { text-shadow: ...

  4. Cache占用过多内存导致Linux系统内存不足问题排查

    问题描述 Linux服务器内存使用量超过阈值,触发报警. 问题排查 首先,通过free命令观察系统的内存使用情况,显示如下: total used free shared buffers cached ...

  5. Windows下Jupyter notebook 修改默认打开(工作、保存)文件夹(路径)

    今天晚上兴致一起突然想看看我写了那么多的ipynb文件都去哪了 首先查了一下,应该是都默认保存到    C:\Users\芩溪儿   路径下了 然后我就想,我是不是得改改啊,总在那跟别的文件夹在一起总 ...

  6. [51Nod 1218] 最长递增子序列 V2 (LIS)

    传送门 Description 数组A包含N个整数.设S为A的子序列且S中的元素是递增的,则S为A的递增子序列.如果S的长度是所有递增子序列中最长的,则称S为A的最长递增子序列(LIS).A的LIS可 ...

  7. 利用Redis锁解决高并发问题

    这里我们主要利用Redis的setnx的命令来处理高并发. setnx 有两个参数.第一个参数表示键.第二个参数表示值.如果当前键不存在,那么会插入当前键,将第二个参数做为值.返回 1.如果当前键存在 ...

  8. 淘宝的开源分布式文件系统TFS

    TFS(Taobao FileSystem)是淘宝团队开源的海量非结构化数据存储设计的分布式系统.构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问.高可扩展.高可用.高性能.面向 ...

  9. JVM常用参数(内存分配 内存回收日志)

    内存监控  -verbose:gc 测试代码 public static void main(String[] args){ List<Classes> classes=new Array ...

  10. 修改Xorg.conf配置显示分辨率

    修改Xorg.conf是件简单的事,配置文件结构简单,也没有复杂的语法,但是一但配置失败,后果是比较 严重的,,所以强烈建议每次修改之前做好备份工作. Xorg.conf一般位于/etc/X11/xo ...