शुद्ध वीबीस्क्रिप्ट मानते हुए "सरल" जवाब, एक बिग्नम जोड़ने और गुणा लिखना था और फिर उस तरह के उत्तर की गणना करना था।
RosettaCode से कोड का उपयोग करना, मैं निम्नलिखित VeryLargeInteger वर्ग और एक Hex64 समारोह जो कहता है कि 4702170486407730494 64 बिट 0x41417724EBA8953E
की दशमलव बराबर
Option Explicit
Class VeryLongInteger
'http://rosettacode.org/wiki/Long_Multiplication#Liberty_BASIC
Public Function MULTIPLY(Str_A, Str_B)
Dim signA, signB, sResult, Str_Shift, i, d, Str_T
signA = 1
If Left(Str_A,1) = "-" Then
Str_A = Mid(Str_A,2)
signA = -1
End If
signB = 1
If Left(Str_B,1) = "-" Then
Str_B = Mid(Str_B,2)
signB = -1
End If
sResult = vbNullString
Str_T = vbNullString
Str_shift = vbNullString
For i = Len(Str_A) To 1 Step -1
d = CInt(Mid(Str_A,i,1))
Str_T = MULTBYDIGIT(Str_B, d)
sResult = ADD(sResult, Str_T & Str_shift)
Str_shift = Str_shift & "0"
'print d, Str_T, sResult
Next
If signA * signB < 0 Then sResult = "-" + sResult
'print sResult
MULTIPLY = sResult
End Function
Private Function MULTBYDIGIT(Str_A, d)
Dim sResult, carry, i, a, c
'multiply Str_A by digit d
sResult = vbNullString
carry = 0
For i = Len(Str_A) To 1 Step -1
a = CInt(Mid(Str_A,i,1))
c = a * d + carry
carry = c \ 10
c = c Mod 10
'print a, c
sResult = CStr(c) & sResult
Next
If carry > 0 Then sResult = CStr(carry) & sResult
'print sResult
MULTBYDIGIT = sResult
End Function
Public Function ADD(Str_A, Str_B)
Dim L, sResult, carry, i, a, b, c
'add Str_A + Str_B, for now only positive
l = MAX(Len(Str_A), Len(Str_B))
Str_A=PAD(Str_A,l)
Str_B=PAD(Str_B,l)
sResult = vbNullString 'result
carry = 0
For i = l To 1 Step -1
a = CInt(Mid(Str_A,i,1))
b = CInt(Mid(Str_B,i,1))
c = a + b + carry
carry = Int(c/10)
c = c Mod 10
'print a, b, c
sResult = CStr(c) & sResult
Next
If carry>0 Then sResult = CStr(carry) & sResult
'print sResult
ADD = sResult
End Function
Private Function Max(a,b)
If a > b Then
Max = a
Else
Max = b
End If
End Function
Private Function pad(a,n) 'pad from right with 0 to length n
Dim sResult
sResult = a
While Len(sResult) < n
sResult = "0" & sResult
Wend
pad = sResult
End Function
End Class
Function Hex64(sHex)
Dim VLI
Set VLI = New VeryLongInteger
Dim Sixteen(16)
Sixteen(0) = "1"
Sixteen(1) = "16"
Sixteen(2) = VLI.MULTIPLY(Sixteen(1),"16")
Sixteen(3) = VLI.MULTIPLY(Sixteen(2),"16")
Sixteen(4) = VLI.MULTIPLY(Sixteen(3),"16")
Sixteen(5) = VLI.MULTIPLY(Sixteen(4),"16")
Sixteen(6) = VLI.MULTIPLY(Sixteen(5),"16")
Sixteen(7) = VLI.MULTIPLY(Sixteen(6),"16")
Sixteen(8) = VLI.MULTIPLY(Sixteen(7),"16")
Sixteen(9) = VLI.MULTIPLY(Sixteen(8),"16")
Sixteen(10) = VLI.MULTIPLY(Sixteen(9),"16")
Sixteen(11) = VLI.MULTIPLY(Sixteen(10),"16")
Sixteen(12) = VLI.MULTIPLY(Sixteen(11),"16")
Sixteen(13) = VLI.MULTIPLY(Sixteen(12),"16")
Sixteen(14) = VLI.MULTIPLY(Sixteen(13),"16")
Sixteen(15) = VLI.MULTIPLY(Sixteen(14),"16")
Dim theAnswer, i, theDigit, theMultiplier, thePower, aPower
theAnswer = "0"
aPower = 0
For i = Len(sHex) To 1 Step -1
theDigit = UCase(Mid(sHex,i,1))
theMultiplier = InStr("ABCDEF",theDigit)-1
thePower = Sixteen(aPower)
thePower = VLI.MULTIPLY(CStr(theMultiplier),thePower)
theAnswer = VLI.ADD(theAnswer,thePower)
aPower = aPower + 1
Next
Hex64 = theAnswer
End Function
WScript.Echo Hex64("41417724EBA8953E")
मैं कहना है "आनंद" चाहते हैं, लेकिन है बना लिया है मूल पोस्टिंग के बाद से यह छह महीने से अधिक रहा है, इसलिए आपको शायद एक और समाधान मिल गया है। वही, यह मजेदार था।
बाद
Hex64 ऐसा करने के लिए, यदि आप 16 की शक्तियों के precalculation से बचना चाहते हैं अन्य तरीका है:
Function Hex64b(sHex)
Dim VLI
Set VLI = New VeryLongInteger
Dim theAnswer, i, theDigit, theMultiplier, thePower, aPower
theAnswer = "0"
thePower = "1"
For i = Len(sHex) To 1 Step -1
theDigit = UCase(Mid(sHex,i,1))
theMultiplier = InStr("ABCDEF",theDigit)-1
theAnswer = VLI.ADD(theAnswer,VLI.MULTIPLY(thePower,theMultiplier))
thePower = VLI.MULTIPLY(thePower,"16")
Next
Hex64b = theAnswer
End Function