Tenho um trabalho pratico na faculdade valendo 10 pontos. O professor quer que façamos um programa que transforme algarismos em um numero escrito por extenso. 
 
	Ex:
 
	1 um 
 
	2 dois...
 
	102 cento e dois...
 
	E esse programa precisa realizar essa função até a centena de milhão. Cheguei a fazer a codificação baseada em switch/case. Mas estou tendo dificuldades para reproduzir a conjunção "e" no meio da numeração extensa, já que em certas situações a numeração não cabe a conjunção.
 
	Durante a compilação: "cento noventa dois milhoes novecentos quarenta sete mil trezentos doze"
 
	Como deve ficar: "cento e noventa e dois milhoes novecentos e quarenta e sete mil trezentos e doze"
 
	Seria muito fácil colocar tipo:
 
case 9 << cout "cento e ";break; 
	mas, o problema é que há condicionantes, e não estou conseguindo trabalhar com a estrutura de decisão if/else. 
 
	O problema também acontece quando há uso de dígitos 0, pois não soube declarar que o sistema deve optar por imprimir "cem" no lugar de "cento"
 
	 
 
	Segue o código que estruturei, se alguém puder, por favor revisar meu código ou me dar uma breve explicação do que fazer para resolver isso. Ficarei muito grato!
 
	 
 
#include <iostream>
using namespace std;
int main ()
{
    int cM,dM, uM, cm, dm, um, c, d, u;
    cin >> cM >> dM >> uM>> cm >> dm >> um >> c >> d >> u;
    switch (cM)
    {
        case 9: cout << "novecentos ";break;
        case 8: cout << "oitocentos ";break;
        case 7: cout << "setecentos ";break;
        case 6: cout << "seiscentos ";break;
        case 5: cout << "quinhentos ";break;
        case 4: cout << "quatrocentos ";break;
        case 3: cout << "trezentos ";break;
        case 2: cout << "duzentos "; break;
        case 1: cout << "cento "; break;
    }
    switch (dM)
        {
        case 9: cout << "noventa ";break;
        case 8: cout << "oitenta ";break;
        case 7: cout << "setenta ";break;
        case 6: cout << "sessenta ";break;
        case 5: cout << "cinquenta ";break;
        case 4: cout << "quarenta ";break;
        case 3: cout << "trinta ";break;
        case 2: cout << "vinte "; break;
        if (dm=1)
        case 1:
          switch (um)
        {
        case 9: cout << "dezenove mil ";break;
        case 8: cout << "dezoito mil ";break;
        case 7: cout << "dezesete mil ";break;
        case 6: cout << "dezeseis mil ";break;
        case 5: cout << "quinze mil ";break;
        case 4: cout << "quatorze mil ";break;
        case 3: cout << "treze mil ";break;
        case 2: cout << "doze mil "; break;
        case 1: cout << "onze mil ";break;
        }
        }
    if (dM!=1)
    switch (uM)
        {
        case 9: cout << "nove milhoes ";break;
        case 8: cout << "oito milhoes ";break;
        case 7: cout << "sete milhoes ";break;
        case 6: cout << "seis milhoes ";break;
        case 5: cout << "cinco milhoes ";break;
        case 4: cout << "quatro milhoes ";break;
        case 3: cout << "tres milhoes ";break;
        case 2: cout << "dois milhoes "; break;
        case 1: cout << "um milhoes ";break;
    }
    switch (cm)
    {
        case 9: cout << "novecentos ";break;
        case 8: cout << "oitocentos ";break;
        case 7: cout << "setecentos ";break;
        case 6: cout << "seiscentos ";break;
        case 5: cout << "quinhentos ";break;
        case 4: cout << "quatrocentos ";break;
        case 3: cout << "trezentos ";break;
        case 2: cout << "duzentos "; break;
        case 1: cout << "cento "; break;
    }
    switch (dm)
        {
        case 9: cout << "noventa ";break;
        case 8: cout << "oitenta ";break;
        case 7: cout << "setenta ";break;
        case 6: cout << "sessenta ";break;
        case 5: cout << "cinquenta ";break;
        case 4: cout << "quarenta ";break;
        case 3: cout << "trinta ";break;
        case 2: cout << "vinte "; break;
        if (dm=1)
        case 1:
          switch (um)
        {
        case 9: cout << "dezenove mil ";break;
        case 8: cout << "dezoito mil ";break;
        case 7: cout << "dezesete mil ";break;
        case 6: cout << "dezeseis mil ";break;
        case 5: cout << "quinze mil ";break;
        case 4: cout << "quatorze mil ";break;
        case 3: cout << "treze mil ";break;
        case 2: cout << "doze mil "; break;
        case 1: cout << "onze mil ";break;
        }
        }
    if (dm!=1)
    switch (um)
        {
        case 9: cout << "nove mil ";break;
        case 8: cout << "oito mil ";break;
        case 7: cout << "sete mil ";break;
        case 6: cout << "seis mil ";break;
        case 5: cout << "cinco mil ";break;
        case 4: cout << "quatro mil ";break;
        case 3: cout << "tres mil ";break;
        case 2: cout << "dois mil "; break;
        case 1: cout << "um mil ";break;
    }
    switch (c)
    {
        case 9: cout << "novecentos ";break;
        case 8: cout << "oitocentos ";break;
        case 7: cout << "setecentos ";break;
        case 6: cout << "seiscentos ";break;
        case 5: cout << "quinhentos ";break;
        case 4: cout << "quatrocentos ";break;
        case 3: cout << "trezentos ";break;
        case 2: cout << "duzentos "; break;
        case 1: cout << "cento "; break;
    }
    switch (d)
        {
        case 9: cout << "noventa ";break;
        case 8: cout << "oitenta ";break;
        case 7: cout << "setenta ";break;
        case 6: cout << "sessenta ";break;
        case 5: cout << "cinquenta ";break;
        case 4: cout << "quarenta ";break;
        case 3: cout << "trinta ";break;
        case 2: cout << "vinte "; break;
        if (d=1)
        case 1:
          switch (u)
        {
        case 9: cout << "dezenove";break;
        case 8: cout << "dezoito";break;
        case 7: cout << "dezesete";break;
        case 6: cout << "dezeseis";break;
        case 5: cout << "quinze";break;
        case 4: cout << "quatorze";break;
        case 3: cout << "treze";break;
        case 2: cout << "doze"; break;
        case 1: cout << "onze";break;
        }
        }
    if (d!=1)
    switch (u)
        {
        case 9: cout << "nove";break;
        case 8: cout << "oito";break;
        case 7: cout << "sete";break;
        case 6: cout << "seis";break;
        case 5: cout << "cinco";break;
        case 4: cout << "quatro";break;
        case 3: cout << "tres";break;
        case 2: cout << "dois"; break;
        case 1: cout << "um";break;
    }
        }