¿Cuál es el error lógico en mi siguiente código para la multiplicación de karatsuba?

Hay múltiples problemas en el código.

La salida absurda viene debido a un error en makelength (). Cambie “string temp (n, 0)” a “string temp (n, ‘0’)”. Estaba insertando el valor ASCII 0 en lugar del carácter ‘0’. Esto hará que la salida contenga caracteres no numéricos. Si se soluciona este problema, el programa siempre dará una salida numérica adecuada. Solo con esta solución, obtendrá el resultado correcto solo para algunas entradas.

Para obtener resultados correctos para todos los tipos de entradas:

En la función karatmul (x, y),

1. Primero, haga que xey tengan el mismo número de dígitos rellenando con ‘0’ en el frente. Esto también simplificará enormemente su programa.

2. Tenemos que ocuparnos del caso cuando el número contiene un número impar de dígitos. Para manejar tanto el número impar como el par de dígitos, tenemos que hacer el piso (n / 2) en el paso de división y el techo (n / 2) en el paso de cambio (o) el techo (n / 2) en el paso de división y piso (n / 2) en el paso de turno. El paso de división es donde está calculando high1, low1, … y el paso de cambio es donde está calculando el resultado al cambiar el resultado intermedio (llamando a makelength ()).