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

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


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

题目1138:进制转换 (大数据10进制到2进制)

题目描述: 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 输入: 多组数据,每行为一个长度不超过30位的十进制非负整数。 (注意是10进制数字的个数可能有30个,而非...
  • xianyafu
  • xianyafu
  • 2016年05月05日 16:32
  • 741

3:十进制数转二进制数(类似大整数除法)

题目链接:http://dsalgo.openjudge.cn/huawen02/3/ 题目大意就是将十进制数转换成二进制,难就难在十进制数的位数小于100位。 这就意味着不能用任意类型来存,只能...
  • u010568535
  • u010568535
  • 2017年10月10日 16:28
  • 258

大数除法

参考代码: //除数为int值,结果为整数 #include #include #define N 100 int main() { char a[N],div[N]; int i,j=0,l...
  • xukun5137
  • xukun5137
  • 2015年06月04日 10:14
  • 407

十进制数转二进制数

  • 2016年07月07日 16:00
  • 5.6MB
  • 下载

九度OJ 1080  (大整数的任意进制的转换)

题目描述: 将M进制的数X转换为N进制的数输出。 输入: 输入的第一行包括两个整数:M和N(2 下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数...
  • Jaster_wisdom
  • Jaster_wisdom
  • 2016年08月03日 22:00
  • 2607

大数运算--除法

#include #include #include #include #include using namespace std; //大数运算最关键的是用进制理解,就是把一个数组元素表示的...
  • sunmenggmail
  • sunmenggmail
  • 2012年05月03日 18:27
  • 10952

大数,高精度计算---大数除法

大数是算法语言中的数据类型无法表示的数,其位数超过最大数据类型所能表示的范围,所以,在处理大数问题时首先要考虑的是怎样存储大数,然后是在这种存储方式下其处理的实现方法。 一般情况下大数的存储是采用字...
  • hitwhylz
  • hitwhylz
  • 2013年08月01日 13:16
  • 13348

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

辗转求余法实现的任意长度十进制数到2进制和16进制转换方法
  • Runnerchin
  • Runnerchin
  • 2017年07月24日 16:11
  • 658

十进制整数转化为二进制详解

要想编写十进制转化成二进制的带码首先要清楚十进制转化成二进制的算法,下面我们从两个方面实现这个转化: 1.按照十进制转化成十进制的常规算法实现: 废话不多说直接上图:...
  • lyztyycode
  • lyztyycode
  • 2017年04月02日 20:26
  • 659

大数运算(5)——大数除法(取模、取余)

有关于大数除法的运算可以大致分为两种:一种是求商,另一种是取余。 有两个大整数a和b,当a==b时,a/b==1,余数是0。(a!=0,b!=0)                           ...
  • lisp1995
  • lisp1995
  • 2016年08月30日 16:15
  • 4785
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:任意长度的十进制数转为二进制、十六进制,和大数除法算法(只有小半份)
举报原因:
原因补充:

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