number letter count

This commit is contained in:
VicRen
2020-10-16 10:30:13 +08:00
parent 8cdae54cd4
commit 1d172fd23c
2 changed files with 171 additions and 0 deletions

View File

@@ -0,0 +1,78 @@
package main
import "fmt"
func main() {
count := 0
for i := 1; i <= 1000; i++ {
count += CountNumberLetter(i)
}
fmt.Println("count:", count)
}
var numberToLetter = map[int]string{
1: "one",
2: "two",
3: "three",
4: "four",
5: "five",
6: "six",
7: "seven",
8: "eight",
9: "nine",
10: "ten",
11: "eleven",
12: "twelve",
13: "thirteen",
14: "fourteen",
15: "fifteen",
16: "sixteen",
17: "seventeen",
18: "eighteen",
19: "nineteen",
20: "twenty",
30: "thirty",
40: "forty",
50: "fifty",
60: "sixty",
70: "seventy",
80: "eighty",
90: "ninety",
100: "hundred",
1000: "thousand",
}
func CountNumberLetter(input int) int {
n := input
num := ""
if input <= 20 {
num += numberToLetter[input]
fmt.Println("input:", n, "num:", num, len(num))
return len(num)
}
if input/1000 > 0 {
num += "onethousand"
input = input % 1000
}
hundred := input / 100
if hundred != 0 {
num += numberToLetter[hundred] + "hundred"
}
input = input % 100
one := input % 10
ten := input / 10
if one == 0 && hundred == 0 {
num += numberToLetter[input]
} else {
if hundred > 0 && (one > 0 || ten > 0) {
num += "and"
}
if ten == 1 {
num += numberToLetter[input]
} else {
num += numberToLetter[ten*10] + numberToLetter[one]
}
}
fmt.Println("input:", n, "num:", num, "len:", len(num))
return len(num)
}

View File

@@ -0,0 +1,93 @@
package main
import (
"testing"
)
func TestCountNumberLetter(t *testing.T) {
tt := []struct {
name string
input int
want int
}{
{
"1",
1,
3,
},
{
"15",
15,
7,
},
{
"90",
90,
6,
},
{
"100",
100,
10,
},
{
"300",
300,
12,
},
{
"23",
23,
11,
},
{
"123",
123,
24,
},
{
"120",
120,
19,
},
{
"115",
115,
20,
},
{
"320",
320,
21,
},
{
"444",
444,
23,
},
{
"499",
499,
24,
},
{
"342",
342,
23,
},
{
"110",
110,
16,
},
}
for _, tc := range tt {
t.Run(tc.name, func(t *testing.T) {
got := CountNumberLetter(tc.input)
if got != tc.want {
t.Errorf("CountNumberLetter(%d)=%d, want %d", tc.input, got, tc.want)
}
})
}
}