Project Euler Problem 17 Number letter counts

Number letter counts

Problem 17

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.


C++:

#include <iostream>
#include <string>

using namespace std;

const int TWENTY = 20;
const int HUNDRED = 28;
const int ONE_THOUSAND = 29;

string number[] = {"", "one", "two", "three",  "four", "five", "six", "seven", "eight", "nine",
    "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen",
    "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety", "hundred and", "one thousand"};

int main()
{
    int sum=0, sum2=0;

    // 1 - 19
    sum2 = 0;
    for(int i=1; i<=19; i++)
        sum2 += number[i].length();
    sum += sum2;

    // 20 - 99
    sum2 = 0;
    for(int i=20; i<=99; i++) {
        int d10 = i / 10, d0 = i % 10;
        sum2 += number[TWENTY + d10 - 2].length();
        if(d0 != 0)
            sum2 += number[d0].length();
    }
    sum += sum2;

    // 100 - 999
    sum2 = 0;
    for(int i=1; i<=9; i++) {
        sum2 += (number[i].length() + number[HUNDRED].length() - 1) * 100 - 3;
        sum2 += sum;
    }
    sum += sum2;

    // 1000
    sum += number[ONE_THOUSAND].length() - 1;

    cout << sum << endl;

    return 0;
}




posted on 2017-03-26 15:57  海岛Blog  阅读(307)  评论(0编辑  收藏  举报

导航