Autor
|
Tema: Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C) (Leído 7,297 veces)
|
NOB2014
Desconectado
Mensajes: 366
|
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: 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: char a[] = "2147483647", b[] = "2";
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
Mensajes: 3.412
ASMático
|
Puedes hacerlo byte a byte. O hacer la multiplicación como un bucle de sumas.
|
|
|
En línea
|
|
|
|
NOB2014
Desconectado
Mensajes: 366
|
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
Mensajes: 3.412
ASMático
|
|
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
Mensajes: 366
|
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.- #include<stdio.h> int main(void){ char a[] = "214", b[] = "3", resultadoChar[3]; int i, j, resultadoInt=0, resto=0, operUno=0, operDos=0; for(i=2; i>=0; i--, j++){ operUno = a[i] - '0'; operDos = b[0] - '0'; resultadoInt = (operUno * operDos) + resto; resto = 0; if(resultadoInt > 9){ resultadoInt -= 10; resto++; } //copiar resultadoInt en resultadoChar[j]; } for(i=0; i<3; i++){ printf("%c", resultadoChar [i ]); } return 0; }
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
Mensajes: 190
|
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 : int main(void) { char a[] = "914", b[] = "3", mult[4]; int i, j, result = 0, resto = 0, operUno = 0, operDos = 0; for(i = j = 2; i >= 0; i--, j--) { operUno = a[i] - '0', operDos = b[0] - '0'; result = operUno * operDos + resto; if (result >= 10) { resto = result / 10; result -= resto * 10; } else resto = 0; mult[j] = result; } if (resto) { for( i = 3; i > 0; i--) mult[i] = mult[i - 1]; mult[0] = resto; } for(i = 0; i < 4 ; i++) printf("%d", mult[i]); return 0; }
Un saludo
|
|
|
En línea
|
|
|
|
NOB2014
Desconectado
Mensajes: 366
|
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.- #include<stdio.h> int main(void){ char a[] = "4294967295", b[] = "2", mult[11]; int i, j, result = 0, resto = 0, operUno = 0, operDos = 0; for(i = j = 10; i >= 0; i--, j--){ operUno = a[i] - '0', operDos = b[0] - '0'; result = operUno * operDos + resto; if (result >= 10){ resto = result / 10; result -= resto * 10; } else resto = 0; mult[j] = result; } if(resto){ for( i = 10; i > 0; i--) mult[i] = mult[i - 1]; mult[0] = resto; } for(i = 0,j = 10; i < 10 ; i++, j--) if(j % 3 == 0) else return 0; }
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.-
|
|
|
|
NOB2014
Desconectado
Mensajes: 366
|
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
Mensajes: 190
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Batch] Poner el resultado de un comando en una variable
Scripting
|
moikano→@
|
7
|
35,420
|
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
|
7,564
|
28 Enero 2013, 20:09 pm
por spiritdead
|
|
|
[Consulta] Programa lenguaje C resultado incorrecto
Programación C/C++
|
neron991
|
9
|
4,341
|
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,904
|
27 Diciembre 2016, 22:07 pm
por NOB2014
|
|
|
Ayuda para poner un resultado dentro de una tabla
PHP
|
KiddKeo
|
4
|
2,720
|
29 Enero 2020, 16:32 pm
por SeñorShell
|
|