英語での数字のスペルがうろ覚えだった。
<?php
//1-20と30,40,50,60,70,80,90,100,1000 の文字数をあらかじめ覚えて置く。
// 100以上の数字には and が入る(100 で割り切れる数字を除く)
// 100以上の数字は one とか two が頭につく。
$answer = 0;
$array = array( 0 =>0, // zero だけど、使わない
1 =>3, // one
2 =>3, // two
3 =>5, // three
4 =>4, // four
5 =>4, // five
6 =>3, // six
7 =>5, // seven
8 =>5, // eight
9 =>4, // nine
10 =>3, // ten
11 =>6, // eleven
12 =>6, // twelve
13 =>8, // thirteen
14 =>8, // fourteen
15 =>7, // fifteen
16 =>7, // sixteen
17 =>9, // seventeen
18 =>8, // eighteen
19 =>8, // nineteen
20 =>6, // twenty
30 =>6, // thirty
40 =>5, // forty
50 =>5, // fifty
60 =>5, // sixty
70 =>7, // seventy
80 =>6, // eighty
90 =>6, // ninety
100 =>7, // hundred
1000=>8);// thousand
$and = 3;//and が入る場合
// 1000 の数字はあらかじめ加算
$answer = $array[1000] + $array[1];
for($i = 1 ; $i < 1000 ; $i++)
{
$num = $i;
// 100 より大きい場合
if($num >= 100)
{
// 100で割り切れない場合
if($num % 100 != 0)
{
$answer += $and;
}
//100の桁の文字を算出
$digit3 = (int)($num / 100);
$answer += $array[100] + $array[$digit3];
$num -= $digit3 * 100;
}
// 下二けたが20より小さい場合
if($num < 20)
{
$answer += $array[$num];
}
else
{
// 10 の桁の文字を算出
$digit2 = (int)($num / 10) * 10;
// 1 の桁の文字を算出
$digit1 = $num - $digit2;
$answer += $array[$digit2] + $array[$digit1];
}
}
echo $answer;
?>