九度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 ...
随机推荐
- iOS 循环引用解决方案
一.BLOCK 循环引用 一般表现为,某个类将block作为自己的属性变量,然后该类在block的方法体里面又使用了该类本身.构成循环引用. // 定义 block 的时候,会对外部变量做一次 cop ...
- run_test() 验证平台的入口
Run,just run! ——阿甘正传 一个简单的例子: module tb_top; dut u_dut (); initial begin run_test(); end config ...
- Nginx性能优化参考
nginx性能优化参考 1)调整配置文件中的配置项的值(配置文件:nginx.conf) worker_processes auto;开启的进程数,一般配置为跟逻辑CPU核数一样worker_rlim ...
- ejb2.0用本地引用提高EJB访问效率
用本地引用提高EJB访问效率 EJB 1.0和1.1规范只定义了一种在EJB组件中引用另一组件的方法,即通过Bean的远程接口.如果两个Bean都在同一个容器之内,则这种网络开销是不必要的.为解决这个 ...
- vijos 1164 曹冲养猪
描述 自从曹冲搞定了大象以后,曹操就开始捉摸让儿子干些事业,于是派他到中原养猪场养猪,可是曹冲满不高兴,于是在工作中马马虎虎,有一次曹操想知道母猪的数量,于是曹冲想狠狠耍曹操一把.举个例子,假如有16 ...
- UIButton zoomin pressed
// Scale up on button press - (void) buttonPress:(UIButton*)button { button.transform = CGAffineTran ...
- Codeforces Gym 100650B Countdown (离线)
题目链接:http://codeforces.com/gym/100650 根据给出的树和d,求出一些结点,这些结点形成子树的第d层结点数应该尽量多,具体要求可以参考题目. dfs一个结点前保存询问深 ...
- 自己太水了—HDOJ_2212
Problem Description A DFS(digital factorial sum) number is found by summing the factorial of every d ...
- UIWebView与JavaScript相互调用
UIWebView与JavaScript的那些事儿 UIWebView是IOS SDK中渲染网面的控件,在显示网页的时候,我们可以hack网页然后显示想显示的内容.其中就要用到javascript的知 ...
- smarty 运算符列表
下面是可用的运算符列表,使用中都会放到元素的中间并且用空格分隔. 注意列表中[方括号]的是可选的,而且还会列出对应PHP的表达式. 详见:Chapter 7. 内置函数 运算符 别名 语法示例 含义 ...