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
#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
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
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);
}
Otro enfoque en C++
#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);
}
Hola gracias a todos tengo una pregunta en el código de Geeke veo esta asignación v += c & 1 puedes explicarme que hace
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;
}
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;
}