九度oj 题目1208:10进制 VS 2进制
- 题目描述:
-
对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们乘B为A的二进制逆序数。
例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。
- 输入:
-
一个1000位(即10^999)以内的十进制数。
- 输出:
-
输入的十进制数的二进制逆序数。
- 样例输入:
-
173
- 样例输出:
-
181 初看此题,本以为是一道水题。但仔细一看是1000位的整数,难度瞬间提高了好几个档次。
没办法,用处理长整数的办法解题吧!#include <cstdio>
#include <cstdlib>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#define MAX 1009
#define inf 1000000009
#define BASE 4
char temp[MAX];
int src[];
int des[];
int tmp[]; int div(int toD[], int len) {
if(len == ) {
toD[] = toD[]/;
return len;
} int ci = toD[len-];
int j = ;
for(int i = len-; i >= ; i--) {
int q = ci * + toD[i];
int p = q/;
ci = q%;
tmp[j] = p;
j++;
}
int t = ;
for(int v = j-; v >= ; v--) {
toD[t++] = tmp[v];
} int p = tmp[] / ;
int q = tmp[] % ;
toD[t++] = q;
if(p != ) {
toD[t++] = p;
} return t;
} int mul2(int toM[], int len) {
int ci = ;
for(int i = ; i < len; i++) {
int p = toM[i] * + ci;
int q = p % ;
ci = p/;
toM[i] = q;
}
if(ci != ) {
toM[len] = ci;
len++;
} return len;
} int inc(int toM[], int len) {
int ci = ;
for(int i = ; i < len; i++) {
int p = toM[i] + + ci;
int q = p % ;
ci = p/;
toM[i] = q;
if(ci == ) {
return len;
}
}
toM[len] = ci;
len++;
return len;
} int main(int argc, char const *argv[])
{ //freopen("input.txt","r",stdin);
while(scanf("%s",temp) != EOF) {
int k = ;
memset(src, , sizeof(src));
int i = strlen(temp)-;
for(;i > BASE-; i = i-BASE) {
for(int j = i - BASE+; j <= i; j++) {
src[k] = * src[k] + (temp[j] - '');
}
k++;
}
for(int j = ; j <= i; j++) {
src[k] = * src[k] + (temp[j] - '');
}
k++;
/*for(int i = k-1; i >= 0; i--) {
printf("%04d",src[i]);
}
printf("\n");*/
memset(des, , sizeof(des));
int lend = ;
while(true) {
if((src[]& )== ) {
//des = des * 2;
lend = mul2(des, lend);
//printf("0");
}
else {
//des = des * 2 + 1;
lend = mul2(des, lend);
lend = inc(des,lend);
//printf("1");
} k = div(src, k); /*for(int i = k-1; i >= 0; i--) {
printf("%04d",src[i]);
}
printf("\n");*/ if(k == && src[] == ) {
break;
}
}
//printf("\n");
printf("%d",des[lend-]);
for(int i = lend-; i >= ; i--) {
printf("%04d",des[i]);
}
printf("\n");
}
return ;
}代码先将输入的字符串转化为4个一单位的整数数组,之后模拟了整数的除法和乘2操作以及加1操作。
代码提交了两次才通过。原因是第一次在处理除法时偷懒,使最高位可以大于4位,导致错误
九度oj 题目1208:10进制 VS 2进制的更多相关文章
- 九度OJ题目1208:10进制 VS 2进制 (JAVA)
题目描述: 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们乘B为A的二进制逆序数. 例如对于十进制数173,它的二进制形式为10101101,逆序排列得到1 ...
- hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度oj 题目1007:奥运排序问题
九度oj 题目1007:奥运排序问题 恢复 题目描述: 按要求,给国家进行排名. 输入: 有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...
- 九度OJ 题目1384:二维数组中的查找
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
- 九度oj题目1009:二叉搜索树
题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ题目1105:字符串的反码
tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...
- 九度oj题目1002:Grading
//不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...
随机推荐
- mongodb 正则
正则表达式常用来在所有语言中搜索字符串的任何模式或文字.MongoDB还提供了正则表达式功能的字符串模式使用正则表达式$regex操作符.MongoDB使用PCRE(Perl兼容正则表达式)为正则表达 ...
- Hibernate三种批量处理数据
概念:批量处理数据是指在一个事务场景中处理大量数据. 在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作 数据库层面 execute ...
- DVWA之命令注入(command injection)
Command injection就是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的 LOW 无论是Windows还是Linux,都可以使用&&连接多个命令 执行 ...
- APP启动原理
当我们点击一个应用的时候,系统会自动创建一个相应的activity类实例,然后执行Oncreate方法,接着会执行以下两行代码,解释如下: super.onCreate(savedInstanceSt ...
- 补充---spring多线程任务调度
在spring任务调度的基础上增加多线程 三种方式: (1)使用OpenSymphony Quartz 调度器 (2)使用JDK Timer支持类 (3)SpringTaskExecutor抽象 sp ...
- Codeforces Gym 100650B Countdown (离线)
题目链接:http://codeforces.com/gym/100650 根据给出的树和d,求出一些结点,这些结点形成子树的第d层结点数应该尽量多,具体要求可以参考题目. dfs一个结点前保存询问深 ...
- 微擎框架中receive.php代码分析
- awk日志分割
awk日志分割 1. awk实现日志按照日期分割 #!/bin/bash DATE=$(date -d yesterday +%Y-%m-%d) awk 'BEGIN{RS="'$DATE ...
- 学习C语言库函数
使用C语言功能强大的函数,我们需要包含头文件 #include<math.h>. 1)取两个数的较大值或较小值函数: double a = 9.9; double b = 6.6; pri ...
- CF-1082(渣渣只做了前三个)
链接:http://codeforces.com/contest/1082 A. Vasya and Book 题意: n,x,y,d 一本电子书有n页,每一次翻动只能往前或者往后翻d页.求x-> ...