Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Semrush - keyword research tool

Create your online store today with Shopify

Turn ChatGPT, Claude, Gemini, And CoPilot Into Your Personal Assistant, Business Coach, Content Creator, And More

AFFILIATE MARKETING Your all-in-one performance engine Manage affiliates, creators, and customer referrals in one unified platform—turning every partnership into measurable growth

Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Disclosure: My content contains affiliate links.

43,140 questions

56,014 answers

573 users

How to multiply two long numbers in VB.NET

1 Answer

0 votes
Imports System
Imports System.Linq

'/* Multiply Two Long Numbers
'   ------------------------------------
'   Implements manual big‑integer multiplication
'   using decimal strings.
'*/

Imports System.Text

Public Class LongNumber

    Private ReadOnly _value As String

    Public Sub New(ByVal v As String)
        _value = Normalize(v)
    End Sub

    Public ReadOnly Property Value As String
        Get
            Return _value
        End Get
    End Property

    '/* Multiply two integer strings a * b and return the result as a string.
    '   Caller receives a normal VB.NET String.
    '   No aliasing issues because Strings are immutable. */
    Public Function Multiply(ByVal other As LongNumber) As LongNumber
        Dim a As String = Me._value
        Dim b As String = other._value

        ' Handle sign
        Dim sign As Boolean = False
        If a.StartsWith("-"c) Then
            sign = Not sign
            a = a.Substring(1)
        End If
        If b.StartsWith("-"c) Then
            sign = Not sign
            b = b.Substring(1)
        End If

        ' If either is "0", return "0"
        If a = "0" OrElse b = "0" Then
            Return New LongNumber("0")
        End If

        Dim la As Integer = a.Length
        Dim lb As Integer = b.Length
        Dim digits(la + lb - 1) As Integer

        '/* Multiply from right to left */
        For i As Integer = la - 1 To 0 Step -1
            Dim ca As Char = a(i)
            If Not Char.IsDigit(ca) Then Continue For

            For j As Integer = lb - 1 To 0 Step -1
                Dim cb As Char = b(j)
                If Not Char.IsDigit(cb) Then Continue For

                Dim pos As Integer = i + j + 1
                Dim sum As Integer = digits(pos) + (Convert.ToInt32(ca) - Convert.ToInt32("0"c)) * (Convert.ToInt32(cb) - Convert.ToInt32("0"c))

                digits(pos) = sum Mod 10
                digits(pos - 1) += sum \ 10
            Next
        Next

        ' Convert digits() to string, skipping leading zero
        Dim sb As New StringBuilder()
        Dim start As Integer = If(digits(0) = 0, 1, 0)

        For i As Integer = start To digits.Length - 1
            sb.Append(Convert.ToChar(digits(i) + Convert.ToInt32("0"c)))
        Next

        ' Add sign if needed
        If sign Then
            sb.Insert(0, "-"c)
        End If

        Return New LongNumber(sb.ToString())
    End Function

    Private Shared Function Normalize(ByVal s As String) As String
        ' Skip leading spaces
        s = s.TrimStart()

        ' Remove leading zeros (but leave one zero)
        Dim i As Integer = 0
        While i < s.Length - 1 AndAlso s(i) = "0"c
            i += 1
        End While

        Return s.Substring(i)
    End Function

    Public Overrides Function ToString() As String
        Return _value
    End Function

End Class


' Demo program
Module Program
    Sub Main()
        Dim a As New LongNumber(" 18361891827367132321")
        Dim b As New LongNumber("-18361891827367132321")

        Dim result As LongNumber = a.Multiply(b)
        Console.WriteLine(result)
    End Sub
End Module



' run:
'
' -337159071479931885857929667075122847041
'

 



answered Jun 18 by avibootz
...