您的位置:首页 > 其它

Project Euler – Problem 17

2012-05-05 08:26 411 查看
If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total.

If all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?

NOTE: Do not count spaces or hyphens. For example, 342 (three hundred and forty-two) contains 23 letters and 115 (one hundred and fifteen) contains 20 letters. The use of “and” when writing out numbers is in compliance with British usage.

绝大部分情况可以简单将对应位数字字母长度相加。需要特殊处理的部分有:11-19、超过100、整百、1000

static void Main(string[] args)
{
// null one two three four five six seven eight nine
int[] one2nine = new int[]{0, 3, 3, 5, 4, 4, 3, 5, 5, 4};

// null null twenty thirty forty
// fifty sixty seventy eighty ninety
int[] tens = new int[] { 0, 0, 6, 6, 5, 5, 5, 7, 6, 6 };

// ten eleven twelve thirteen fourteen
// fifteen sixteen seventeen eighteen nineteen
int[] ten2nineteen = new int[] { 3, 6, 6, 8, 8, 7, 7, 9, 8, 8 };

int sum = 0;

// 百位
for (int i = 0; i < 10; i++)
{
// 十位
for (int j = 0; j < 10; j++)
{
// 个位
for (int k = 0; k < 10; k++)
{
// 11-19 特殊处理
if (j != 1)
sum += one2nine[i] + tens[j] + one2nine[k];
else
sum += one2nine[i] + ten2nineteen[k];

// 大于100, + hundred and
if (i > 0)
sum += 10;
// 整百, - and
if (i > 0 && j + k == 0)
sum -= 3;
}
}

}
sum += 11;  // + one thousand

Console.WriteLine(sum);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: