Dev - C++ - Ayuda con codigo. Dar un numero en letras

 
Vista:

Ayuda con codigo. Dar un numero en letras

Publicado por Mauricio (1 intervención) el 25/02/2013 04:21:40
Quiero pasar un numero a escrito, pero tengo un problemas con los millones , si escribo 1 000 000 me arrija un millon mil. e que el problema es que al restarle p, queda como 3 entonces me imprime el mil. Lo que no se es como solucionarlo sin que me afecte los otros resultados

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <stdio.h>
main()
{
   int num[10];
   int i,j=1,p,r;
   printf("Introduce un numero no mayor a 999,999,999:   ");
   for(i=0;(num[i]=getchar()) != '\n';i++);
 
   if(i>6&&i<=9) p=6;
      else if(i>3&&i<=6){ p=3; j++; }
	 else if(i>0&&i<=3){ p=0; j+=2; }
for(j=j;j<=3;j++)
{
  if((i==3 || i==6)||(num[0]!=' ' || num[3]!=' ' || num[6]!=' ') )
      switch(num[i-(3+p)])
      {
	 case'1':if((num[(i-(3+p))+1]!='0') || (num[(i-(3+p))+2]!='0'))
		     printf("ciento ");
		 else
		     printf("cien ");
		 break;
	 case'2':printf("doscientos ");break;
	 case'3':printf("trescientos ");break;
	 case'4':printf("cuatrocientos ");break;
	 case'5':printf("quinientos ");break;
	 case'6':printf("seiscientos ");break;
	 case'7':printf("setecientos ");break;
	 case'8':printf("ochocientos ");break;
	 case'9':printf("novecientos ");break;
      }
 
      switch(num[i-(p+2)])
      {
	 case'1':switch(num[(i-(p+2))+1])
		 {
		    case'0':printf("diez ");break;
		    case'1':printf("once ");break;
		    case'2':printf("doce ");break;
		    case'3':printf("trece ");break;
		    case'4':printf("catorce ");break;
		    case'5':printf("quince ");break;
		    case'6':printf("diesciseis ");break;
		    case'7':printf("diescisiete ");break;
		    case'8':printf("diesciocho ");break;
		    case'9':printf("diescinueve ");break;
		 }break;
	 case'2':if(num[(i-(p+2))+1]=='0')   printf("veinte ");
		 else   printf("veinti");   break;
	 case'3':printf("treinta "); if(num[(i-1)-p]!='0') printf("y "); break;
	 case'4':printf("cuarenta "); if(num[(i-1)-p]!='0') printf("y "); break;
	 case'5':printf("cincuenta "); if(num[(i-1)-p]!='0') printf("y "); break;
	 case'6':printf("secenta "); if(num[(i-1)-p]!='0') printf("y "); break;
	 case'7':printf("setenta "); if(num[(i-1)-p]!='0') printf("y "); break;
	 case'8':printf("ochenta "); if(num[(i-1)-p]!='0') printf("y "); break;
	 case'9':printf("noventa "); if(num[(i-1)-p]!='0') printf("y "); break;
      }
 
      if(num[i-(p+2)]!='1')
      switch(num[(i-1)-p])
      {
	 case'1':
        if(p>=3) printf("un ") ;
		else printf("uno");
		break;
	 case'2':printf("dos ");break;
	 case'3':printf("tres ");break;
	 case'4':printf("cuatro ");break;
	 case'5':printf("cinco ");break;
	 case'6':printf("seis ");break;
	 case'7':printf("siete ");break;
	 case'8':printf("ocho ");break;
	 case'9':printf("nueve ");break;
      }
    if(p==6 && num[0]=='0' && p==6 && num[1]=='0' && p==6 && num[2]=='0');
       else if(p==6 && num[0]=='1' && i==7) printf("millon ");
	  else if(p==6) printf("millones ");
      if(p==3 && num[p]!=' '|| p==3 && num[p+1]!='0' || p==3 && num[p+2]!='0')printf("mil ");
      p-=3;
}
   getchar();
   return 0;
}
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

Ayuda con codigo. Dar un numero en letras

Publicado por Juan Carlos Lopez Venegas (1 intervención) el 27/11/2020 21:15:21
Tal vez es demasiado tarde pero es que soy nuevo en esto, verás,
1
if(p==3 && num[p]!=' '|| p==3 && num[p+1]!='0' || p==3 && num[p+2]!='0')printf("mil ");
En esta parte te falto añadir el cero a if(p==3 && num[p]!=' '|| , solo es eso y listo
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