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;
}




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值