elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C)  (Leído 6,617 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C)
« en: 29 Septiembre 2014, 00:09 am »

Hola y que tengan un muy buen día.
Como verán me estoy poniendo un poco pesado pero prometo que después de esto y por un tiempo voy a exponer mis dudas en otro foro, prometido.-
Al grano, esta operación no es factible en c:
Código
  1. unsigned a = 2147483648, b = 2, c = a * b;
 
Tengo conocimiento de las variable con más capacidad pero no importa en este caso, lo que quiero hacer es multiplicaciones realmente grandes y para ello quiero hacerlo con 2 variables char, también sé que esto si se puede hacer:
Código
  1. char a[] = "2147483647", b[] = "2";
  2. unsigned int c = atoi(a) * atoi(b);
pero me limita al valor máximo que puede contener una variable unsigned int.-
Alguien sabe de alguna curiosidad matemática, algo a nivel de bist, algo que me dé el inicio para multiplicar 2 números alojados en variables char y poner el resultado  en otra del mismo tipo?, Cualquier ayuda será bien venida.-

Saludos.
Daniel   


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C)
« Respuesta #1 en: 29 Septiembre 2014, 00:11 am »

Puedes hacerlo byte a byte.
O hacer la multiplicación como un bucle de sumas.


En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C)
« Respuesta #2 en: 29 Septiembre 2014, 00:26 am »

Hola ivancea96.
Por lo que tengo visto no te debe gustar postear códigos por lo menos en los que yo te he leído parece una constante, podrías ponerme algún ejemplo con código (una acepción) o un poco más de teoría.-
Desde ya muchas gracias.-


Saludos.
Daniel   
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re:
« Respuesta #3 en: 29 Septiembre 2014, 00:41 am »

No posteo código, porque opino que con el concepto basta ^^
En cualquier caso, ahora estoy en el móvil.
Para lo que dije, lo primero es sumar cadenas. Eso se hace, como si fuera una suma en papel. "Sumas un número con el otro, y si es mayor de 9, le restas 10, y te llevas una."
Y así caracter a caracter, empezando desde la derecha. Cabe decir, que hay que tener cuidado con colocarle un tamaño correcto al char* de salida. (No se vaya a hacer char[-1] o algo del estilo)
En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C)
« Respuesta #4 en: 30 Septiembre 2014, 04:22 am »

Hola a todos.
Gracias a ivancea96 pude arrancar con la idea, es obvio que me faltan un montón de detalles, pero lo que me trae en este momento y sin ello no puedo seguir es que sintaxis debo utilizar para copiar resultadoInt en resultadoChar[j] y si me pudieran decir si estoy bien rumbeado.-

Código
  1. #include<stdio.h>
  2.  
  3. int main(void){
  4. char a[] = "214", b[] = "3", resultadoChar[3];
  5. int i, j, resultadoInt=0, resto=0, operUno=0, operDos=0;
  6. for(i=2; i>=0; i--, j++){
  7. operUno = a[i] - '0';
  8. operDos = b[0] - '0';
  9. resultadoInt = (operUno * operDos) + resto;
  10. resto = 0;
  11. if(resultadoInt > 9){
  12. resultadoInt -= 10;
  13. resto++;
  14. }
  15. //copiar resultadoInt en resultadoChar[j];
  16. }
  17.  
  18. for(i=0; i<3; i++){
  19. printf("%c", resultadoChar[i]);
  20. }
  21.  
  22. return 0;
  23. }

Saludos.
Daniel  
« Última modificación: 30 Septiembre 2014, 04:45 am por NOB2014 » En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C)
« Respuesta #5 en: 30 Septiembre 2014, 21:39 pm »

pero lo que me trae en este momento y sin ello no puedo seguir es que sintaxis debo utilizar para copiar resultadoInt en resultadoChar[j] y si me pudieran decir si estoy bien rumbeado.-

Inicializar j a 2 para ir almacenando el resultado en la ultima posición del array  e ir decrementandolo sucesivamente, te dejo el código con todas las correcciones en especial la parte de acarreo que no tomaba algunos casos :

Código
  1. int main(void)
  2. {
  3.    char a[] = "914", b[] = "3", mult[4];
  4.    int i, j, result = 0, resto = 0, operUno = 0, operDos = 0;
  5.  
  6.    for(i = j = 2; i >= 0; i--, j--)
  7.    {
  8.        operUno = a[i] - '0', operDos = b[0] - '0';
  9.        result = operUno * operDos + resto;
  10.        if (result >= 10)
  11.        {
  12.            resto = result / 10;
  13.            result -= resto * 10;
  14.        }
  15.        else
  16.            resto = 0;
  17.        mult[j] = result;
  18.    }
  19.    if (resto)
  20.    {
  21.        for( i = 3; i > 0; i--)
  22.            mult[i] = mult[i - 1];
  23.        mult[0] = resto;
  24.    }
  25.    for(i = 0; i < 4 ; i++)
  26.        printf("%d", mult[i]);
  27.  
  28.    return 0;
  29. }
  30.  

Un saludo
En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C)
« Respuesta #6 en: 1 Octubre 2014, 00:33 am »

Hola Blaster.
Genial amigo gracias funciona perfecto, pero ahora necesito algo más, hay alguna fórmula matemática para establecer las cifras totales que tendrá el resultado de una multiplicación.-
Por ejemplo el programa siguiente tuve que hacer la cuenta en un papel para establecer los elementos de mult[11] y otra cosita, que asegura que el último elemento de multi tendrá el ‘\0’ no encuentro esa parte.-
 
Código
  1. #include<stdio.h>
  2.  
  3. int main(void){
  4. char a[] = "4294967295", b[] = "2", mult[11];
  5. int i, j, result = 0, resto = 0, operUno = 0, operDos = 0;
  6.  
  7. for(i = j = 10; i >= 0; i--, j--){
  8. operUno = a[i] - '0', operDos = b[0] - '0';
  9. result = operUno * operDos + resto;
  10. if (result >= 10){
  11. resto = result / 10;
  12. result -= resto * 10;
  13. }
  14. else
  15. resto = 0;
  16. mult[j] = result;
  17.    }
  18. if(resto){
  19. for( i = 10; i > 0; i--)
  20. mult[i] = mult[i - 1];
  21. mult[0] = resto;
  22. }
  23. for(i = 0,j = 10; i < 10 ; i++, j--)
  24. if(j % 3 == 0)
  25. printf(".%d", mult[i]);
  26. else
  27. printf("%d", mult[i]);
  28.  
  29. return 0;
  30. }

Lo último que hice es para que quedara más paquete, lo que pasa es que  con 9 cifras el resultado me lo muestra así .000.000.000, luego lo arreglo.-       

Saludos.
Daniel   
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
T. Collins

Desconectado Desconectado

Mensajes: 206


Ver Perfil
Re: Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C)
« Respuesta #7 en: 1 Octubre 2014, 00:57 am »

http://www.cquestions.com/2010/08/multiplication-of-large-numbers-in-c.html
En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C)
« Respuesta #8 en: 1 Octubre 2014, 04:18 am »

Hola Blaster.
Le encontré 2 cosas que se deben cambiar.
Si el operando más a la izquierda tiene menos cifras que el de la derecha, el resultado es erróneo.
456 x 1234
La otra, si el operando más a la derecha tiene más de una cifra, el resultado también falla.-   
456 x 12
T. Collins gracias por colaborar, el inglés no es mi fuerte.-
Bueno seguiré picando código para ver si lo logro.-

Saludos.
Daniel   
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C)
« Respuesta #9 en: 1 Octubre 2014, 05:02 am »

Le encontré 2 cosas que se deben cambiar.
Si el operando más a la izquierda tiene menos cifras que el de la derecha, el resultado es erróneo.
456 x 1234
La otra, si el operando más a la derecha tiene más de una cifra, el resultado también falla.-   
456 x 12

Claro yo solo seguí la lógica de tu código asumiendo que el multiplicador seria no mas de un dígito para encarar operaciones del tipo que expones se tendría que hacer importantes modificaciones al código; quedaría un poco mas extenso y complejo

Un Saludo NOB2014
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Batch] Poner el resultado de un comando en una variable
Scripting
moikano→@ 7 34,513 Último mensaje 25 Diciembre 2010, 00:44 am
por FerJGS
Realizar otra vez y dar el resultado del IF « 1 2 »
.NET (C#, VB.NET, ASP)
carlosuc99 14 6,863 Último mensaje 28 Enero 2013, 20:09 pm
por spiritdead
[Consulta] Programa lenguaje C resultado incorrecto
Programación C/C++
neron991 9 3,931 Último mensaje 14 Julio 2015, 19:47 pm
por banwave_
Función strcpy propia en lenguaje C. (copiar una cadena en otra)
Programación C/C++
NOB2014 5 5,350 Último mensaje 27 Diciembre 2016, 22:07 pm
por NOB2014
Ayuda para poner un resultado dentro de una tabla
PHP
KiddKeo 4 2,329 Último mensaje 29 Enero 2020, 16:32 pm
por SeñorShell
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines