Sumar y multiplicar una serie de números

Iniciado por SebaC, 8 Mayo 2016, 20:37 PM

0 Miembros y 1 Visitante están viendo este tema.

SebaC

Debo realizar el siguiente programa que reciba como entrada una serie de 1 y 0 este debe sumar los grupos de 1 y luego multiplicar cada uno

Por ejemplo: 011110011100011
Salida: 4*3*2= 24

Hasta ahora llevo esto

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int main()
{
    int num, cant=0;
    int resto;

do{
     num=num/10;
    resto=num%10;

    if(resto==1)
       cant++;
} while(num)

   return 0;
}

El problema es que no se como multiplicarlos

class_OpenGL

Te pide que introduzcas una serie de 1s y 0s, pero tu introduces un entero. ¿Cuál es la diferencia? Que si tienes un 0 a la izquierda no lo vas a leer. Así que lo que tienes que hacer es leer una cadena de caracteres e iterar por toda ella verificando que posiciones son '1' y qué posiciones son '0'. Ahora solo queda aplicar las reglas propuestas

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

AlbertoBSD

#2
Es cierto lo que te dicen, tienes que manejar cadenas en lugar de enteros, por lo menos con la entrada que muestras el 0 a la izquierda se perderia con un entero.

#include<stdio.h>
#include<string.h>

int main() {
char *numero = "011110011100011";
int len = strlen(numero);
int i = 0;
int n,m = 1,entrar = 0;
while(i < len) {
n = 0;
printf("Evaluando %c\n",numero[i]);
while(numero[i] == '1' && i < len) {
printf(".\n");
n++;
i++;
entrar =1;
}
if( entrar ) {
m = m * n;
i--;
entrar =0;
}
i++;
}
printf("%i",m);
}
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

geeke

Otro enfoque en C++
Código (cpp) [Seleccionar]

#include <iostream>

int main()
{
    int c, m = 1, v = 0;

    for(; (c = std::cin.get()) != '\n'; v += c & 1)
        if( v && c == '0' && std::cin.peek() == '1' )
        {
            m *= v;
            std::cout << v << '*';
            v = 0;
        }
    std::cout << v << " = " << (m *= v);
}

SebaC

Hola gracias a todos tengo una pregunta en el código de Geeke veo esta asignación v += c & 1 puedes explicarme que hace

MAFUS

En C, facilito y para toda la família  :rolleyes:

#include <stdio.h>

int main() {
   char str[255];
   scanf("%255s", str);
   int n = 0;
   int res = 1;
   int i;
   
   for(i = 0; i < sizeof(str); ++i) {
       if(str[i] == '1')
           ++n;
       else {
           if(n)
               res *= n;
           n = 0;
       }
   }
   printf("%i\n", res);
   
   return 0;
}

geeke

Los caracteres '0' y '1' son equivalente a:

48 en base 2: 110001
49 en base 2: 110000

El primero tiene el bit 1 a cero, el segundo no al realizar c & 1 la expresión resulta en 1 si el carácter es '1' y 0 si el carácter es '0'.

Y de paso otra aproximación en C  :rolleyes:

#include <stdio.h>

int main(void)
{
    int m = 1, n;
    while (1)
    {
        scanf("%*[0]");
        scanf("%*[1]%n", &n);
        if (n > 0)
        {
            m *= n;
            n = 0;
        }
        else
            break;
    }
    printf("%d\n", m);
    return 0;
}