Sumar números(string) de 50,100 o más dígitos

Estuve probando lo que me dijiste pero no me funciono... Pero bueno...
Tengo esto espero que me ayudes
Lo que estoy tratando de hacer es sumar números de 50, 100 o más dígitos
sumando a la antigua con reservas y todo... Como en la básica ... XD...
Tengo problemas con este código me gustaría saber cuantas fallas tengo... Si me puedes ayudar te lo agradecería... Gracias
Public Class Form1
   Dim num1(100) As String
   Dim num2(100) As String
   Dim len_num1 As String
   Dim len_num2 As String
   Dim dif_len As Integer
   Dim cero As Integer
   Dim reserva As Integer
   Dim resultado As String
Private Sub Button1_Click(.....) Handles Button1.Click
   num1(100) = TextBox1.Text
   num2(100) = TextBox2.Text
   len_num1 = Len(num1(100))
   len_num2 = Len(num2(100))
   If CInt(len_num1) < CInt(len_num2) Then
   dif_len = CInt(len_num1) - CInt(len_num2)
   cero = StrDup(dif_len, "0")
   num1(100) = cero & num1(100)
   len_num1 = Len(num1(100))
   ElseIf CInt(len_num1) > CInt(len_num2) Then
   dif_len = CInt(len_num1) - CInt(len_num2)
   cero = StrDup(dif_len, "0")
   num2(100) = cero & num2(100)
   len_num1 = Len(num2(100))
   End If
   For i = CInt(len_num1) To 1 Step -1
   Mid(resultado, i, 0) = CStr(CInt(Mid(num1(100), i, 0)) + CInt(Mid(num2(100), i, 0)))
   If reserva <= 9 Then
   reserva = 0
   Else
   reserva = 1
   resultado = resultado - 10
   End If
   Next
   End Sub
Private Sub Button2_Click(.....) Handles Button2.Click
TextBox1.Clear()
TextBox2.Clear()
TextBox3.Clear()
End Sub
Private Sub Button3_Click(.....) Handles Button3.Click
End
End Sub
End Class

1 respuesta

Respuesta
1
Creo que estas enfocando mal el problema
Lo primero que debes hacer es buscar que tipo de datos de los manejados por el lenguaje de programación, soporta estos números de 50 y 100 dígitos, esa es la primera cosa que debes hacer, luego, las sumas y restas, etc, son mucho más fáciles.
Estuve revisando este problema y llegue a esto...
La cosa es que suma pero me da mal el resultado, debe ser por el IF que tengo dentro del FOR no se me ocurre como poder hacer para que me de el resultado... agadeceria tu ayuda
Public Class Form1
Dim num1(100) As String
Dim num2(100) As String
Dim len_num1 As String
Dim len_num2 As String
Dim dif_len As Integer
Dim cero As String
Dim reserva As Integer
Dim resultado(100) As String
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
num1(100) = TextBox1.Text
num2(100) = TextBox2.Text
len_num1 = Len(num1(100))
len_num2 = Len(num2(100))
If CInt(len_num1) > CInt(len_num2) Then
dif_len = CInt(len_num1) - CInt(len_num2)
cero = StrDup(dif_len, "0")
num2(100) = cero & num2(100)
len_num2 = Len(num2(100))
ElseIf CInt(len_num2) > CInt(len_num1) Then
dif_len = CInt(len_num2) - CInt(len_num1)
cero = StrDup(dif_len, "0")
num1(100) = cero & num1(100)
len_num1 = Len(num1(100))
End If
cero = StrDup(CInt(len_num1), "0")
resultado(100) = cero & resultado(100)
TextBox3.Text = resultado(100)
For i = Len(resultado(100)) To 1 Step -1
Mid(resultado(100), i, 1) = CStr(CInt(Mid(num1(100), i, 1)) + CInt(Mid(num2(100), i, 1)))
If reserva <= 9 Then
reserva = 0
Else
reserva = 1
resultado(100) = resultado(100) - 10
End If
Next
TextBox3.Text = resultado(100)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
TextBox1.Clear()
TextBox2.Clear()
TextBox3.Clear()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
End
End Sub
End Class
Esta mal esta cosa... jajaja no lo tomes en cuenta
No entiendo ... tu dices "sumar" pero en ningún lado veo " a + b" lo que estas es concatenando o uniendo 2 cadenas o Strings que contienen números.
Si me explicas mejor que es lo que estas intentando hacer tal vez pueda ayudarte
Nos dijeron que teníamos que sumar números como string... de 50, 100 o más dígitos...
Si tengo en el primer numero 1200 y el segundo 200 al segundo numero le tengo que agregar un cero adelante del 2 esto quedaría
   1209
 +0201
-----------
   1410
Pero para que me resulte tengo que guardar en una variable la reserva si es que me da 1 o 0
pero no me esta resultando tengo problemas en la suma y para sumar la reserva cuando quiero sumar 2 y 8 se cae ... no se que más puedo hacer para que esta cosa me resulte
Y cuando lo hago con
     1200
     0200
-----------------
     1400
Me da cuando lo quiero hacer con 20 dígitos o más se cae, también el el caso en que la reserva me da 1 y tengo que sumársela al otro numero se cae
¿Tu conviertes esos números a Valores? ¿Cómo lo haces?
CInt(Mid(num1(100),i,1)) esta funcion me recorre todo el numero, de 1 en uno ....en este caso en el FOR de atras a adelante si tengo 1200 me recorre el 0, 0 ,2, 1 pero tengo probelmas por q no me esta resultando....
i=Len(.......) es el total de numeros q tengo en este caso 4 (1200)
despues de sumar un numero y el otro ej.: 0 +2 q seria 2 el CStr lo convierte en string dejando el la variable resultado 2 ( el 2 seria el ultimo numero de resultado)
1200 + 1202 = 2402
For i = Len(resultado(100)) To 1 Step -1
Mid(resultado(100), i, 1) = CStr(CInt(Mid(num1(100), i, 1)) + CInt(Mid(num2(100), i, 1)))
Next
Si tengo 18 + 12 el el for lo recorre de atrás a adelante qdaria algo así 8 + 2 pero en vez de colocarme 0 coloca 1 entonces para ello debo tener una variable "reserva" q me guarde las reservas y después la ocupe para sumarla con el numero siguiente que seria lo lógico el numero 1 + 1 + reserva (q seria 1) pero no resulta nada de nada lo q me tira es 21 y lo q debo obtener es 30
con los números de más dígitos se me cae
Public Class Form1
   Dim num1(200) As String
   Dim num2(200) As String
   Dim len_num1 As String
   Dim len_num2 As String
   Dim dif_len As Integer
   Dim cero As String
   Dim r(2) As String
   Dim reserva(2) As String
   Dim resultado(200) As String
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
   num1(200) = TextBox1.Text
   num2(200) = TextBox2.Text
   len_num1 = Len(num1(200))
   len_num2 = Len(num2(200))
   If CInt(len_num1) > CInt(len_num2) Then
   dif_len = CInt(len_num1) - CInt(len_num2)
   cero = StrDup(dif_len, "0")
   num2(200) = cero & num2(200)
   len_num2 = Len(num2(200))
   ElseIf CInt(len_num2) > CInt(len_num1) Then
   dif_len = CInt(len_num2) - CInt(len_num1)
   cero = StrDup(dif_len, "0")
   num1(200) = cero & num1(200)
   len_num1 = Len(num1(200))
   End If
   cero = StrDup(CInt(len_num1), "0")
   resultado(200) = cero & resultado(200)
   reserva(2) = 0
   For i = Len(resultado(200)) To 1 Step -1
   Mid(resultado(200), i, 1) = CStr(CInt(Mid(num1(200), i, 1)) + CInt(Mid(num2(200), i, 1)))
   r(2) = CInt(Mid(num1(200), i, 1)) + CInt(Mid(num2(200), i, 1))
   If CInt(r(2)) <= 9 Then
   Mid(resultado(200), i, 1) = CInt(Mid(r(2), 1, 1))
   ElseIf CInt(r(2)) > 9 Then
   'reserva(2) = 1
   Mid(resultado(200), i, 1) = CInt(Mid(r(2), 2, 1))
   Mid(reserva(2), 2, 1) = CInt(Mid(r(2), 1, 1))
   End If
   'Mid(num1(200), i, 1) = CInt(Mid(num1(200), i, 1)) + CInt(Mid(reserva(2), 1, 1))
   ListBox1.Items.Add(resultado(200))
   Next
   'ListBox1.Items.Add(resultado(200))
   'TextBox3.Text = resultado(200)
   End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
   TextBox1.Clear()
   TextBox2.Clear()
   TextBox3.Clear()
   ListBox1.Items.Clear()
   End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
   End
End Sub
End Class
¿No seria más sencillo y practico hacer CInt(num1) + Cint(num2)?
Pero para hacer una suma de 50 o más dígitos no me va a soportar
Ni idea de como hacerlo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas