forked from Btime/QueroSerBtime
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
118 lines (104 loc) · 2.37 KB
/
index.js
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
CONTANDO AS LETRAS DOS NÚMEROS
Referência:
http://dojopuzzles.com/problemas/exibe/contando-as-letras-dos-numeros/
Problema:
Se os números de 1 a 5 fossem escritos em palavras: um, dois, três, quatro, cinco, então teríamos utilizado 2 + 4 + 4 + 6 + 5 = 21 letras no total.
Se todos os números de 1 até 1000 fossem escritos em palavras, quantas letras nós teríamos utilizado?
*/
var inicial = 1;
var final = 1000;
var contagem = 0;
for (var i = inicial; i <= final; i++) {
var str = escreveMilhar(i);
contagem += str.length;
}
console.log('Teríamos ' + contagem + ' letras.');
function escreveMilhar(numero){
if (numero < 1000) {
return escreveCentena(numero);
}
var porExtenso = [
'zero',
'mil'
];
if (!(numero % 1000) || (numero % 1000 === 0)) {
return porExtenso[numero / 1000];
} else {
return porExtenso[Math.floor(numero / 1000)] + ' e ' + escreveCentena(numero % 1000);
}
}
function escreveCentena(numero){
if (numero < 100) {
return escreveDezena(numero);
} else if (numero === 100) {
return "cem";
}
var porExtenso = [
'zero',
'cento',
'duzentos',
'trezentos',
'quatrocentos',
'quinhentos',
'seiscentos',
'setecentos',
'oitocentos',
'novecentos'
];
if (!(numero % 100) || (numero % 100 === 0)) {
return porExtenso[numero / 100];
} else {
return porExtenso[Math.floor(numero / 100)] + ' e ' + escreveDezena(numero % 100);
}
}
function escreveDezena(numero) {
if (numero < 10) {
return escreveUnidade(numero);
}
var porExtenso = [[
'zero',
'dez',
'vinte',
'trinta',
'quarenta',
'cinquenta',
'sessenta',
'setenta',
'oitenta',
'noventa'
],[
'zero',
'onze',
'doze',
'treze',
'quatorze',
'quinze',
'dezesseis',
'dezessete',
'dezoito',
'dezenove',
]];
if (numero > 10 && numero < 20) {
return porExtenso[1][numero % 10];
} else if (!(numero % 10) || (numero % 10 === 0)) {
return porExtenso[0][numero / 10];
} else {
return porExtenso[0][Math.floor(numero / 10)] + ' e ' + escreveUnidade(numero % 10);
}
}
function escreveUnidade(numero) {
var porExtenso = [
'zero',
'um',
'dois',
'três',
'quatro',
'cinco',
'seis',
'sete',
'oito',
'nove'
];
return porExtenso[numero];
}