任意长度的十进制数转为二进制、十六进制,和大数除法算法(只有小半份)

原创 2017年07月24日 16:11:09

辗转求余法实现的任意长度十进制数到2进制和16进制转换方法


Sub asdf()
Debug.Print Dec2Bin("3214123412351234123415123412351234123451235123412341234")
Debug.Print Dec2Hex("3214123412351234123415123412351234123451235123412341234")
End Sub


'任意长度的10进制数的整除运算,除数为2
Function Div2(devidend As String) As String
    Dim Remain As Boolean   '当前数位是否有余数
    For i = 1 To Len(devidend)
        Dim CuInt As Integer
        CuInt = IIf(Remain, 10, 0) + Mid(devidend, i, 1) '上一位有余数时,加到当前数位上再做除法
        Remain = Not (CuInt Mod 2 = 0)
        Div2 = Div2 & CuInt \ 2
    Next i
End Function


'任意长度的10进制数对2求余(判断最后一位数字是奇数还是偶数)
Function Mod2(devidend As String) As Integer
    Mod2 = IIf(Right(devidend, 1) Mod 2 = 1, 1, 0)
End Function


'任意长度的10进制数转为2进制,辗转求余
Function Dec2Bin(devidend As String) As String
    Dim res As String
    res = devidend
    Do
        Dec2Bin = Mod2(res) & Dec2Bin
        res = Div2(res)
    Loop Until (res = 0)
End Function


'任意长度的10进制数转为16进制(先转成2进制,再转成16进制)
Function Dec2Hex(devidend As String) As String
    Dim res As String
    res = Dec2Bin(devidend)
    If Len(res) Mod 4 > 0 Then res = String(4 - (Len(res) Mod 4), "0") & res '补齐起始4位
    For i = 1 To Len(res) - 3 Step 4
        Dec2Hex = Dec2Hex & Hex(Mid(res, i, 1) * 8 + Mid(res, i + 1, 1) * 4 + Mid(res, i + 2, 1) * 2 + Mid(res, i + 3, 1))
    Next i
End Function


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

超级(无限)大的 --- 整型10进制数据与16进制数据相互转换

超级(无限)大的 --- 整型10进制数据与16进制数据相互转换; 数据压缩算法,超过整数表示范围的大数据算术运算,大进制数据互相转换; 高效的乘除法竖式计算模型,乘法转换成加法运算,除法转换成减法运...

浅谈大数的进制转换

在数据结构课关于栈的这一章中,我们都学过用“模2取余法”来将一个10进制数转换为一个二进制数,进而可以推广到“模n取余法”,经其转换为n进制(n任意指定)。 确实,这是一个很基础的题目,可你是否想过...
  • SJF0115
  • SJF0115
  • 2013年03月19日 10:47
  • 6991

大数二进制转换

1132: 数据结构习题--使用栈实现进制转换 时间限制: 1 Sec  内存限制: 128 MB 提交: 15  解决: 9 [提交][状态][讨论版] 题目描述 使用栈将一个很长(>30)的十进...

freebsd网卡驱动程序详解

/* 注释:xie_minix */ /*此处为BSD申明,略过... 最好是拷贝下来用C的开发工具来看比较好 :) */ /* 当网络上一台计算机准备发送数据时,他的网卡开始工作了,首先...
  • h_cszc
  • h_cszc
  • 2012年07月23日 16:54
  • 2983

C# 值类型、引用类型、装箱和拆箱、变量和常量

c#的值类型可以分为以下几种: ●简单类型(Simple types) ●结构类型(Struct types) ●枚举类型(Enumeration types) 简单类型 ...

位操作:十进制数转为二进制,八进制,十六进制

#include #include #define MAP_LEN 16 #define HEX_SHIFT 4 #define HEX_LEN ( (int)(32/HEX_SH...

栈的应用--数制转换(十进制数转换为二进制、八进制、十六进制)

结果图: 代码如下:#include #include #define ERROR 0 #define OK 1 typedef int Status; typedef int ElemType; ...

134 编程实现:把十进制数(long 型)分别以二进制和十六进制形式输出,不能使用 printf系列

雅虎三道面试题 34、编程实现:把十进制数(long 型)分别以二进制和十六进制形式输出,不能使用 printf 系 列 /* 34、编程实现:把十进制数(long 型)分别以二进制和十六进...

二进制数 八进制数 十进制数 十六进制数 之间的相互转换!!!!

咳咳   咳咳   开场还是要像个领导,领导开场都是咳咳  两声,我咳了四声  说明我不是领导啊 !  好的 进入正题。             先说说对于我们来说最简单的 ,  我们从小到大接触...
  • zch0127
  • zch0127
  • 2016年09月27日 16:06
  • 390
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:任意长度的十进制数转为二进制、十六进制,和大数除法算法(只有小半份)
举报原因:
原因补充:

(最多只允许输入30个字)