将2^n (n=1000000) 转化为10进制输出
#include <iostream>
using namespace std;
#define MAXN 360000
#define OneNode 1000000000//div每次取9位10进制数
const __int64 base = ((__int64)1)<<32;
unsigned long bin[MAXN];
long len;
long ret[MAXN/8];
long cnt;
void init(char *str)//2进制数转换为2^32进制数
{
long i;
for(i=0;i<n/32;i++)
{bin[i] = 0;}
bin[i] = 1<<(n%32);
len = n/32+1;
}
void cal_length()
{
long i;
for(i=len-1;i>=0;i--)
{if(bin[i]) break;}
len = i+1;
if(len==0)
len = 1;
}
long div()//2^32进制转化为10^9进制,每次取得9位低位10进制数(类比10进制转化为2进制的取模求低位数),过程中需要将2^32进制数转化为10进制数以执行取模运算
{
long i;
long carry = 0;
__int64 tmp;
for(i=len-1;i>=0;i--)//len是该2^32进制数的位数
{
tmp = carry*base + bin[i];
carry= tmp % OneNode;
bin[i] = tmp/OneNode;
}
cal_length();//该32进制数的位数减少了(类比10进制数转化为2进制数的过程中原数的位数在不断减少)
return carry;
}
bool iszero()
{
if(len==1&&bin[0]==0) return true;
else
return false;
}
void solve()
{
long i;
cnt = 0;
while(!iszero())//当该数为0时,转换完成
{
ret[cnt++] = div();
}
printf("%ld",ret[cnt-1]);
for(i=cnt-2;i>=0;i--)
printf("%09ld",ret[i]);//每次输出9位,不足9位的在高位处用0补上
printf("\n");
}
int main()
{
long n;
while(scanf("%ld",&n)!=EOF)
{
init(n);
solve();
}
return 0;
}
高进制转化为低进制,除进制取余,除尽取反。
低进制转化为高进制,各位乘幂权求和。
复杂度为
O(以10^9为底的2^n的对数 * 以2^32为底的2^n的对数)=O(lg2/288*n^2)
调用div()的次数,即是 div()内for循环的执行
2^n化为10^9进制数的位 次数,即是2^n化为2^32
数 进制数的位数
PS:考试结束!!!蓝蓝路!!!!!!!!!!!
转载于:https://www.cnblogs.com/zgmf_x20a/archive/2009/01/15/1376608.html
将2^n (n=1000000) 转化为10进制输出相关推荐
- 16进制字符串转化为10进制数
同学在MSN CDC电话面试(可惜我在被面试的时候全然没有这么具体的问题了:))中的一个题目:将16进制的字符串转化为10进制数字,例如"1A",则对应26.题目很简单,实现起来也 ...
- C语言 16进制转化为10进制
#include <stdio.h> #include <string.h> int fun(char *str) {char *s = str + 2;//跳过0Xint n ...
- C语言 将16进制转换成10进制输出
大家好!今天来打印16进制转换成10进制输出,16进制前面是0x.这里以打印ABCDEF的10进制为例 如下: 希望有所启发!!!^__^ 大雨落幽燕,白浪滔天,秦皇岛外打鱼船. ---------- ...
- 使用指针输入一段16进制字符串,将其转化为10进制
举例,输入fff,输出4095 方法1 #include<iostream> #include<iomanip> #include<cstring> using n ...
- unity 16位进制字符串转化为10进制字符串
笔者在做项目中发现到 当取到微信的唯一编码的时候.这个编码是16进制的字符串 ,我们使用与这个进制的编码转化成为10进制 作为玩家的ID string str = "3A"; ...
- oracle十六进制转数字,16进制如何转化为10进制?
进制转换完全版 以下内容包括: 1).提供两个进制转换包 2).提供进制转换的一些简便方法 3).提供进制转换的不同方法的性能评估 1.两个进制转换包 1)包PKG_DM_BASE_CONV(推荐) ...
- 将一个16进制数转化为10进制数
为什么80%的码农都做不了架构师?>>> int x = 0;// 存放转换后的数字 long d = 0; // 转换后的结果 String ...
- 刷题日记 acwing 2058笨拙的手指 位运算的运用,迭代器的使用,秦九稍(别的进制转化为10进制)
#include<iostream> #include<unordered_set> using namespace std; int get(string a,int b)秦 ...
- c语言16进怎么转10进制,如何把16进制数转化为10进制,c语言编写
满意答案 Lenwi 2017.07.27 采纳率:50% 等级:9 已帮助:811人 #include #include #include int main() { char *Hex = & ...
- c语言16进制按10进制输出,C语言编程:写一个函数,输入一个16进制数,输出相应的10进制数。...
满意答案 chengexin 2013.05.27 采纳率:59% 等级:11 已帮助:10599人 #include #include #include #define N 1000 char ...
最新文章
- P3项目全球模板狗血设计之三 --- 发货到成本中心需要创建预留单
- Wireshark:Usage in Ubuntu 18.04 distribution
- oracle自动imp脚本
- FFmpeg RTMP推HEVC/H265流
- ASP.NET没有魔法——ASP.NET MVC 与数据库之MySQLEF
- fanuc机器人与视觉通信_要说工厂干起活来:工业机器人和数控机床才是真正的一对!...
- Shell脚本基础语法
- style样式包(HTML、CSS)
- x264源代码简单分析:宏块分析(Analysis)部分-帧间宏块(Inter)
- 4.2 tensorflow2实现多总体位置参数趋势性检验——python实战
- 鸿蒙系统与苹果系统,华为的鸿蒙系统和苹果的操作系统,有什么区别?
- 黑马-linux编程
- iOS两个.a文件合并成一个.a文件
- 团队协作工具--worktile
- 微信小程序 个人收支理财记账本小程序Android hbuilderx App毕业设计
- JSFL批量删除fla文件中超出某个宽度的原件
- 【Arcgis每天学一点】从无人机航测的DSM上提取准确的高程点
- 显卡花屏显存测试软件6,在线等,显卡花屏.测试结果如何分辨那个显存坏了
- 环信创建群组html,群组管理
- 浙大计算机学院博士毕业论文要求,浙大在读博士需要3篇SCI 论文才能毕业,清华博士却不作要求!...
热门文章
- 相同风格,牛仔裤和青花瓷风行世界
- 为什么很少人写类似金庸的武侠小说
- C# 自定义网格 dataGridView 初始化 修改数据
- C# 读写txt文件 写txt(IO) TXT追加
- 服务器修改文件后撮,xp系统的dns服务器修改办法.doc
- mysql中的replication_MySQL Replication(主从服务器)配置实例
- java interruptedexception_如何正确的处理InterruptedException
- python下载速度显示_Python获取下载速度并显示进度条
- ppt生成器_#PPT素材神器#在线卡通头像生成器: avataaars generator
- python如何调用程序_Python中调用其他程序的方式详解