C/Visual C - ayuda con esto..

   
Vista:

ayuda con esto..

Publicado por Juan Josue josuefar07@hotmail.com (1 intervención) el 26/09/2014 19:15:34
Tengo una duda con respecto a este ejercicio de la facultad, y necesito entregarlo porque ese justamente va a ser el parcial, miren...


- Realizar un programa que permita sumar dos números enteros muy pero muy grandes, se
deberán ingresar los dos números a sumar como secuencias de caracteres y el resultado
sera la suma de ambos, ejemplo:
ingreso de datos:
12345678912345789123456789
1111111111111111
salida:
12345678913456900234567900


tengo dos maneras de encararlo, pero no terminan de responder a la consigna en si, aqui van:

1)

#include<studio.h>
#include<conio.h>
#include<string.h>
main()
{
char primernumero[51];
char segundonumero[51];
char suma[52];
int i;
int a;
int b;
printf("ingrese el numero: ");
scanf ("%s",& primernumero);
printf("ingrese el otro numero: ");
scanf ("%s",& segundonumero);
a= strlen (primernumero);
b= strlen (segundonumero);
if (a<b)
{ for (i=0;i<b;i++)
{segundonumero[b-1]+primernumero[a-1]
}
}

2)
#include<conio.h>
#include<windows.h>
#include<string.h>
int main()
{
char A[65];
char B[65];
char C[65];
char D[65];
char E[100];
int a,b,c=0;
int j,i,d=0;
int e=0;
system("color 30");
printf("\t Suma de dos grandes numeros\n");
printf("\n Introduzca el primer numero:\n");
scanf("%s",A);
printf("Introduzca el segundo numero:\n ");
scanf ("%s",B);
i= strlen (A)-1;
b= strlen (B)-1;
printf("\n\n la suma de los numeros es:\n");
for (a=i;0<=a;a--){
C[c]=A[a];
c++;
}
C[c]='\0';
printf("\n");
for(b=j;0<=b;b--){
D[d]=B[b];
d++;
}
D[d]='\0';
printf("%s\n",D);
printf("\n");
for(e=0;e<i;e++){
c=0;
d=e;
E[e]=C[c]+D[d];
printf("%s,E[e]");
c++;
d++;
}



return 0;



creo que el error esta en la salida del dato, espero puedan ayudarme.. gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

ayuda con esto..

Publicado por chema (187 intervenciones) el 27/09/2014 11:53:37
Realizar un programa que permita sumar dos números enteros muy pero muy grandes,

¿Qué es un número grande pero muy grande?

se deberán ingresar los dos números a sumar como secuencias de caracteres

¿Se puede realizar de otra manera que no sean secuencias de caracteres?

¿Ingresar números?, eso es nuevo, no se cómo se realizan ese tipo de operaciones.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Oscar

ayuda con esto..

Publicado por Oscar (1 intervención) el 27/09/2014 12:32:41
Programalo para hacerlo tal y como aprendimos a hacerlo nosotros de pequeños.

Pasa los dos número a arrays y recorrelos de izquierda a derecha, avanzando en los dos a la vez.

Suma el valor de ambos y guarda la unidad de la suma en un nuevo vector guardando la parte de decenas como acarreo para la siguiente ejecución (avance).

Puede hacer el avance de uno en uno o de 8 caracteres en 8 caracteres, etc..

Prueba a ver que tamaño de salto es el más eficiente yo lo ajustaría al tamaño de procesamiento de procesamiento de tu equipo o del equipo que uses en la facultad (ya sea de 32 bits o de 64 bits)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con esto..

Publicado por arreglado (1 intervención) el 27/09/2014 13:22:41
si le sumas el arreglo, se hace como cuando ibas a la escuela, uno a uno, si el ingreso de numeros no ingresa numeros no se puede sumar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con esto..

Publicado por Sumatorio (3 intervenciones) el 27/09/2014 19:16:23
Para sacar el acarreo del arreglo mejor sumas un arreglo y despues el otro arreglo lo pones en un ciclo y sumas desde el principio de los arreglos dandole avance al arreglo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con esto..

Publicado por Tom (481 intervenciones) el 29/09/2014 12:48:11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/* */
void suma(char sumando1[], int tam1, char sumando2[], int tam2, char result[]) {
  int suma = 0, acarreo = 0;
 
  for(; tam1; tam1--) {
    suma = sumando1[tam1 - 1] - '0';
    if(tam2) {
      suma += sumando2[tam2 - 1] - '0';
      tam2--;
    }
    result[tam1 - 1] = (suma % 10) + acarreo + '0';
    acarreo = suma / 10;
  }
  result[0] = acarreo + '0';
}
/* */
int main() {
  char *sum1, *sum2, *result;
...
...
  if(tam1 >= tam2) {
    result = (char*)malloc(tam1 + 1);
    suma(sum1, tam1, sum2, tam2);
  } else {
    result = (char*)malloc(tam2 + 1);
    suma(sum2, tam2, sum1, tam1);
  }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con esto..

Publicado por Tom (481 intervenciones) el 29/09/2014 14:59:04
No está bien, pero la idea vale, yo creo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con esto..

Publicado por Chema (187 intervenciones) el 29/09/2014 22:50:16
Se omite por brevedad control de errores.
Está creado en 10 minutos, puede no ser correcto, pero es sencillo de comprobar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
 
 
int main(void){
 
	char a[] = "1234567890";
	char b[] = "111111111";
	char *ptr;
	char *ptc;
	int sizea;
	int sizeb;
	int size;
	int sum = 0;
	int add = 0;
 
	sizea = strlen(a);
	sizeb = strlen(b);
	sizeb--;
	sizea--;
	if ( sizea <= sizeb ){
		ptr = a + sizea ;
		ptc = b+ sizeb ;
		size = sizea;
	} else {
		ptr = b + sizeb ;
		ptc = a +sizea ;
		size = sizeb;
 
	}
 
	for(; size >= 0; ptr--, ptc-- , size--) {
		sum = (*ptr - '0' + *ptc - '0') + add ;
		*ptc= sum % 10 + '0';
		sum >= 10 ? (add = 1) :(add = 0);
 
	}
	printf("      Matriz = %s\n",a);
	printf("Comprobacion = %d",1234567890+111111111);
 
	return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con esto..

Publicado por Chema (187 intervenciones) el 29/09/2014 23:54:28
Se me olvidaba añadir 1 , si el ultimo valor es superior a 10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
 
 
int main(void){
 
	char a[] = "111111111";
	char b[] = "99999999";
	char *ptr;
	char *ptc;
	int sizea;
	int sizeb;
	int size;
	int sum = 0;
	int add = 0;
 
	sizea = strlen(a);
	sizeb = strlen(b);
	sizeb--;
	sizea--;
	if ( sizea <= sizeb ){
		ptr = a + sizea ;
		ptc = b+ sizeb ;
		size = sizea;
	} else {
		ptr = b + sizeb ;
		ptc = a +sizea ;
		size = sizeb;
 
	}
 
	for(; size >= 0; ptr--, ptc-- , size--) {
		sum = (*ptr - '0' + *ptc - '0') + add ;
		*ptc= sum % 10 + '0';
		sum >= 10 ? (add = 1) :(add = 0);
 
	}
	/*adir uno, si el valor al ultimo numero si el valor del penultimo es superior a 10*/
	if (add == 1){
		sum =  *ptc - '0' + add ;
		*ptc= sum % 10 + '0';
	}
 
	printf("      Matriz = %s\n",a);
	 printf("Comprobacion = %d",111111111+99999999);
 
	return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar