Hola Tomás.
Parece ser que no se están tomando bien las indentaciones cuando pegas el programa.
Mas allá de eso, la solución que planteaste, si bien es correcta, resuelve el problema de una forma que prueba todas las combinaciones posibles y termina siendo muy extensa y propensa a errores.
Hay una forma mas simple de pensar esto y te la comparto en la siguiente imagen para que trates de reescribir un programa mas corto.
La idea básica es que tenes un numero x que elige el usuario (por ej 21) y que se usa la respuesta de las preguntas Si/No para determinar que bits estan en 1 y cuales en 0.
Fijate el pseudocodigo de abajo y avisame si se entiende.

y asi sucesivamente hasta llegar al bit 0