EOJ 3031 二进制倒置
题目描述
给定一个整数 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 二进制倒置的更多相关文章
- OJ题解记录计划
容错声明: ①题目选自https://acm.ecnu.edu.cn/,不再检查题目删改情况 ②所有代码仅代表个人AC提交,不保证解法无误 E0001 A+B Problem First AC: 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 秒 内存限制: ...
- 二进制加法Java实现
二进制整数的Java实现 任意两个二进制数(不论在什么位置)相加,只可能出现4种情况.它们是: 0+0=0 1+0=0+1=1 1+1=10=0+向高一位的进位1 1+1+1=11=1+向高一位的进位 ...
- linux二进制/十六进制日志文件如何查看和编辑
使用cat查看二进制,显示乱码 [root@localhost ~]# cat /var/log/wtmp ~~~reboot3.10.0-514.el7.x86_64 �YO#5~~~runleve ...
- # Leetcode 67:Add Binary(二进制求和)
Leetcode 67:Add Binary(二进制求和) (python.java) Given two binary strings, return their sum (also a binar ...
- 使用struct处理二进制
有的时候需要用python处理二进制数据,比如,存取文件.socket操作时.这时候,可以使用python的struct模块来完成. struct模块中最重要的三个函数是pack(), unpack( ...
- 如何开启MySQL 5.7.12 的二进制日志
1. 打开/etc下的my.cnf文件 2. 编辑它,添加内容: log_bin=binary-log #二进制日志的文件名 server_id=1 #必须指定server_id,这是MySQL ...
- 【.net 深呼吸】使用二进制格式来压缩XML文档
在相当多的情况下,咱们写入XML文件默认是使用文本格式来写入的,如果XML内容是通过网络传输,或者希望节省空间,特别是对于XML文档较大的情况,是得考虑尽可能地压缩XML文件的大小. XmlDicti ...
- Javascript的二进制数据处理学习 ——nodejs环境和浏览器环境分别分析
以前用JavaScript主要是处理常规的数字.字符串.数组对象等数据,基本没有试过用JavaScript处理二进制数据块,最近的项目中涉及到这方面的东西,就花一段时间学了下这方面的API,在此总结一 ...
随机推荐
- CSS的常用属性(一)
文本属性 font-size: 16px 文字大小 font-weight: 700 文字粗细 值从100-900 (值为700看上去加粗了) 不推荐使用font-weight: bold font- ...
- Metric Learning度量学习:**矩阵学习和图学习
DML学习原文链接:http://blog.csdn.net/lzt1983/article/details/7884553 一篇metric learning(DML)的综述文章,对DML的意义.方 ...
- 利用string 字符串拷贝
序言:对于laws的代码,完全从Matlab中转来.其中用到了字符串复制和对比的函数. C++要求: 输入字符串,根据字符串,来确定选择数组,用于下一过程 MatLab代码: (1).文件calLaw ...
- iproute2和tc的高级路由用法
#Linux advanced router ip link show #显示链路 ip addr show #显示地址(或ifconfig) ip route show #显示路由(route -n ...
- HDU_1517_博弈(巧妙规律)
A Multiplication Game Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- 【转】虚拟化(一):虚拟化及vmware产品介绍
由于公司最近在做虚拟化监控,因此就需要把虚拟化方面的知识给学习总结一下,对于虚拟化的概念,摘自百度百科,如下: 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机 ...
- 15.5.1【Task实现细节】 生成的代码
还在吗?我们开始吧.由于深入讲解需上百页的篇幅,因此这里我不会讲得太深.但我会提 供足够的背景知识,以有助于你对整个结构的理解.之后可通过阅读我近些年来撰写的博客文章, 来了解更加错综复杂的细节,或简 ...
- 递归、作用域、生命周期(day09)
数组可以作为形式参数使用 数组做形式参数的时候真正的形式参数并 不是数组而是一个可以作为数组使用的 变量 数组形式参数里包含的存储区都不是被调用 函数提供的 声明数组形式参数的时候可以省略中括号 里的 ...
- 文件元数据、文件夹操作(day08)
一.获取文件的元数据(meta data) 通过read write可以对文件的内容进行读写. 但是今天我们要操作的是文件的元数据(文件的属性信息) day08$ls -l hello -rw-rw- ...
- Redis学习笔记(二) - 主从复制
概述 指将一台redis服务器上的数据,复制到其他redis服务器上,前者称为主服务器(master),后者称为从服务器(slave). 默认情况下主从关系为一对多关系. 数据复制是单向的,只能从主服 ...