Dev - C++ - Multiplicación rusa con tabla.

 
Vista:
sin imagen de perfil

Multiplicación rusa con tabla.

Publicado por Oscar (13 intervenciones) el 22/06/2022 21:29:42
Construir un algoritmo que permita multiplicar dos números enteros positivos empleando el método
denominado multiplicación rusa. Este método permite calcular el producto MN de la siguiente
manera: En pasos sucesivos se divide M por 2 (división entera) y se multiplica N por 2. Este proceso
se repite hasta que M es cero. El resultado de la multiplicación deseada se obtiene acumulando
7
aquellos valores sucesivos de N para los cuales el valor de M es impar.
Ejemplo: N = 31 y M = 27

imagen_2022-06-22_132545746

Para este algoritmo también se pide que se imprima una tabla como la del ejemplo.
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
sin imagen de perfil
Val: 1
Ha aumentado su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Multiplicación rusa con tabla.

Publicado por antonio (85 intervenciones) el 23/06/2022 17:22:46
Hola buenas este es el código lo único que la tabla al muestra un poco mal eso lo puedes cambiar a tu gusto pero la idea es esta:
#include <iostream>
#include <stdio.h>
#include <ctype.h>
using namespace std;
//structura donde se va acumulando el resultado y las veces que se ejecuta
struct{
int acumulado;
int veces =1;
}multi;
//crear metodo multiplicacion rusa por parametro le paasremos el numero n y el m
void multiplicacionrusa(int n, int m);
//metodo main
int main(int argc, char** argv) {
//numeros a multiplicar
int n = 31;
int m = 27;
//llamamos al metodo multiplicacion rusa
multiplicacionrusa(n,m);
//mostramos el acumulado y las veces que se ha ejecutado
cout<<"El resultado es: "<<multi.acumulado<<"\n";
cout<<"El numero de veces es: "<<multi.veces<<"\n";


}
//programamos el metodo multiplicasion rusa
void multiplicacionrusa(int n,int m){
//mostrar primera linea tabla
cout<<"N M Acumulado\n";
//mientras m es 0 hacer este bucle
while(m>0){
//mostrarmos valor n actual
cout<<n;
//si el valor m es impar se acumulara el valor de n
if(m%2==1){
//acumular valor de n actual en el acumulado de la estructura
multi.acumulado = multi.acumulado+n;
//Mostrar * si m es impar
cout<<"*";
}
//mostrar m actual y el acumulado de la estructura
cout<<" "<<m<<" "<<multi.acumulado<<"\n";
//sumar 1 a las veces ejecutado
multi.veces = multi.veces+1;
//actualizar n y m actuales
n=n*2;
m=m/2;

}
//hacer la ultima pasada de la tabla es decir la ultima vez cuando m es 0
multi.veces = multi.veces+1;
cout<<n<<" "<<m<<"\n";
}

Asi es como muestra la tabla:

Captura
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Multiplicación rusa con tabla.

Publicado por Oscar (13 intervenciones) el 23/06/2022 21:21:40
Mil gracias capo
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