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;
}
}