题目描述:

对于一个十进制数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进制的更多相关文章

  1. 九度OJ题目1208:10进制 VS 2进制 (JAVA)

    题目描述: 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们乘B为A的二进制逆序数.     例如对于十进制数173,它的二进制形式为10101101,逆序排列得到1 ...

  2. hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  3. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  4. 九度oj 题目1007:奥运排序问题

    九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...

  5. 九度OJ 题目1384:二维数组中的查找

    /********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...

  6. 九度oj题目1009:二叉搜索树

    题目描述: 判断两序列是否为同一二叉搜索树序列 输入:                        开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...

  7. 九度oj 题目1087:约数的个数

    题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...

  8. 九度OJ题目1105:字符串的反码

    tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...

  9. 九度oj题目1002:Grading

    //不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...

随机推荐

  1. this详解,对执行上下文说 Yes

    this 指向多变,很多隐蔽的 bug 都缘于它.与此同时,this 强大灵活,如果能熟练驾驭,就会写出更简洁.优雅的代码. 社区上对于 this 的讲解虽然不少,但缺乏统一梳理. this 相关知识 ...

  2. Hibernate三种批量处理数据

    概念:批量处理数据是指在一个事务场景中处理大量数据. 在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作  数据库层面  execute ...

  3. Java 图形界面开发--图文并茂建立学生管理系统

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/50932501 冷血之心的博客) 图形用户界面(Graphics U ...

  4. LookAround开元之旅(持续更新中...)

    应用介绍随便瞧瞧是一款为android用户量身定做的免费图文资讯软件集美食,文学,语录等频道于一体界面简洁,操作流畅,图文分享,个性收藏是广大卓粉的必备神器APK下载 -->https://ra ...

  5. Gitlab User Guide

    Installation Configuration Set user name and email Add SSH keys Repository Create New Repository Clo ...

  6. java 序列化Serializable 详解

    Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是 ...

  7. MySQL备份和还原数据库及慢查询日志使用

  8. COGS 133. [USACO Mar08] 牛跑步

    ★★★   输入文件:cowjog.in   输出文件:cowjog.out   简单对比时间限制:1 s   内存限制:128 MB Bessie准备用从牛棚跑到池塘的方法来锻炼. 但是因为她懒,她 ...

  9. HDU 6052 To my boyfriend(容斥+单调栈)

    题意:对于一个n*m的方格,每个格子中都包含一种颜色,求出任意一个矩形包含不同颜色的期望. 思路: 啊啊啊啊啊,补了两天,总算A了这道题了,简直石乐志,前面的容斥还比较好写,后面的那个>13那个 ...

  10. JavaScript中数据类型和typeof返回的数据类型

    除了上图,要注意三点:1.symbol是ES6中新增的数据类型 2.typeof(null)结果是Object 3.typeof(Object)和typeof(Array)的结果是function,因 ...