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

原创 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


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

相关文章推荐

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

#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; ...

雅虎面试题─把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列

编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列。 实现了unsigned long型的转换。 [cpp] view plaincopyp...

不能使用printf,将十进制数以二进制数和十六进制的形式输出...

不能使用printf系列库函数。代码不难,但是有两处没看懂!!!下面分享下代码:#include using namespace std; char * get2String(long num) ...

黑马程序员—操作数组的练习:十进制数转换二进制、八进制、十六进制数。

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ---------------------- 说明:本次练习采用移位的方法针对...

任意十六进制数转换成十进制数----不管你输入多长都能转换

#include #include #define N 200 int multiply(int *b,int m,int n,int k) { int i,j,te...

任意十六进制数转换成十进制数----不管你输入多长都能转换

下面是改过后的算法……原算法在后面…… 运行结果: view plain #include    #include    #define N 200 &...

任意十六进制数转换成十进制数----不管你输入多长都能转换

原来它妹这种方法叫大数运算,现在才知道,害我花上好几个小时自己去想……操呀…… 算法由我博客中求阶乘算法变形而得……  下面是改过后的算法……原算法在后面…… 运行结果: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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