EOJ 3031 二进制倒置
2024-08-24 03:11:46
题目描述
给定一个整数 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,因此用数组保存数据。
最新文章
- iOS开发——UI进阶篇(十八)核心动画小例子,转盘(裁剪图片、自定义按钮、旋转)图片折叠、音量震动条、倒影、粒子效果
- python之路之正则表达式
- 从此不再惧怕URI编码:JavaScript及C# URI编码详解
- nginx规则和ci的支持
- Java中 return 和finally
- C++ VARIANT 学习小记录
- ResourceDictionary 和 XAML 资源引用
- HashTable使用举例--C#
- Linux批量清空当前目录中的日志文件
- mmap映射区和shm共享内存的区别总结
- 求链表的倒数第m个元素
- if语句学习
- 使用像素单位设置 EXCEL 列宽或行高
- vue构造器以及实例属性
- jsonp全国天气案例
- MySQL5.6.14从安装到启动全过程
- TensorFlow全新的数据读取方式:Dataset API入门教程
- Fragment基本介绍
- python数组(列表、元组及字典)
- linux运维配置讲解--sshd-config
热门文章
- bootstrap模态框和select2合用时input无法获取焦点(转)
- 省市区县的sql语句——城市
- JSP_内置对象_session
- Scala: Types of a higher kind
- Git更新代码
- BZOJ 3631: [JLOI2014]松鼠的新家 树上差分 + LCA
- BZOJ 1585: Earthquake Damage 2 地震伤害 网络流 + 最小割
- 【转载】java中的反射
- 爬虫系列(八) 用requests实现天气查询
- 7.IDEA创建Web项目和Tomcat配置