#include <cstdio>
#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进制输出相关推荐

  1. 16进制字符串转化为10进制数

    同学在MSN CDC电话面试(可惜我在被面试的时候全然没有这么具体的问题了:))中的一个题目:将16进制的字符串转化为10进制数字,例如"1A",则对应26.题目很简单,实现起来也 ...

  2. C语言 16进制转化为10进制

    #include <stdio.h> #include <string.h> int fun(char *str) {char *s = str + 2;//跳过0Xint n ...

  3. C语言 将16进制转换成10进制输出

    大家好!今天来打印16进制转换成10进制输出,16进制前面是0x.这里以打印ABCDEF的10进制为例 如下: 希望有所启发!!!^__^ 大雨落幽燕,白浪滔天,秦皇岛外打鱼船. ---------- ...

  4. 使用指针输入一段16进制字符串,将其转化为10进制

    举例,输入fff,输出4095 方法1 #include<iostream> #include<iomanip> #include<cstring> using n ...

  5. unity 16位进制字符串转化为10进制字符串

    笔者在做项目中发现到  当取到微信的唯一编码的时候.这个编码是16进制的字符串   ,我们使用与这个进制的编码转化成为10进制 作为玩家的ID string str = "3A"; ...

  6. oracle十六进制转数字,16进制如何转化为10进制?

    进制转换完全版 以下内容包括: 1).提供两个进制转换包 2).提供进制转换的一些简便方法 3).提供进制转换的不同方法的性能评估 1.两个进制转换包 1)包PKG_DM_BASE_CONV(推荐) ...

  7. 将一个16进制数转化为10进制数

    为什么80%的码农都做不了架构师?>>>    int x = 0;// 存放转换后的数字         long d = 0; // 转换后的结果         String ...

  8. 刷题日记 acwing 2058笨拙的手指 位运算的运用,迭代器的使用,秦九稍(别的进制转化为10进制)

    #include<iostream> #include<unordered_set> using namespace std; int get(string a,int b)秦 ...

  9. c语言16进怎么转10进制,如何把16进制数转化为10进制,c语言编写

    满意答案 Lenwi 2017.07.27 采纳率:50%    等级:9 已帮助:811人 #include #include #include int main() { char *Hex = & ...

  10. c语言16进制按10进制输出,C语言编程:写一个函数,输入一个16进制数,输出相应的10进制数。...

    满意答案 chengexin 2013.05.27 采纳率:59%    等级:11 已帮助:10599人 #include #include #include #define N 1000 char ...

最新文章

  1. P3项目全球模板狗血设计之三 --- 发货到成本中心需要创建预留单
  2. Wireshark:Usage in Ubuntu 18.04 distribution
  3. oracle自动imp脚本
  4. FFmpeg RTMP推HEVC/H265流
  5. ASP.NET没有魔法——ASP.NET MVC 与数据库之MySQLEF
  6. fanuc机器人与视觉通信_要说工厂干起活来:工业机器人和数控机床才是真正的一对!...
  7. Shell脚本基础语法
  8. style样式包(HTML、CSS)
  9. x264源代码简单分析:宏块分析(Analysis)部分-帧间宏块(Inter)
  10. 4.2 tensorflow2实现多总体位置参数趋势性检验——python实战
  11. 鸿蒙系统与苹果系统,华为的鸿蒙系统和苹果的操作系统,有什么区别?
  12. 黑马-linux编程
  13. iOS两个.a文件合并成一个.a文件
  14. 团队协作工具--worktile
  15. 微信小程序 个人收支理财记账本小程序Android hbuilderx App毕业设计
  16. JSFL批量删除fla文件中超出某个宽度的原件
  17. 【Arcgis每天学一点】从无人机航测的DSM上提取准确的高程点
  18. 显卡花屏显存测试软件6,在线等,显卡花屏.测试结果如何分辨那个显存坏了
  19. 环信创建群组html,群组管理
  20. 浙大计算机学院博士毕业论文要求,浙大在读博士需要3篇SCI 论文才能毕业,清华博士却不作要求!...

热门文章

  1. 相同风格,牛仔裤和青花瓷风行世界
  2. 为什么很少人写类似金庸的武侠小说
  3. C# 自定义网格 dataGridView 初始化 修改数据
  4. C# 读写txt文件 写txt(IO) TXT追加
  5. 服务器修改文件后撮,xp系统的dns服务器修改办法.doc
  6. mysql中的replication_MySQL Replication(主从服务器)配置实例
  7. java interruptedexception_如何正确的处理InterruptedException
  8. python下载速度显示_Python获取下载速度并显示进度条
  9. ppt生成器_#PPT素材神器#在线卡通头像生成器: avataaars generator
  10. python如何调用程序_Python中调用其他程序的方式详解