我制作了一个解决问题的程序17
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.
我的尝试以 Dart 的方式减去了main方法,如下所示
isSpecialBelow100(number) {
switch(number) {
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
case 19:
case 20:
case 30:
case 40:
case 50:
case 60:
case 70:
case 80:
case 90:
return true;
default:
return false;
}
}
removeExcess(number, weight) => number - number % weight;
getExcess(number, weight) => number % weight;
specialNumberToWord(number) {
switch(number) {
case 1:
return 'one';
case 2:
return 'two';
case 3:
return 'three';
case 4:
return 'four';
case 5:
return 'five';
case 6:
return 'six';
case 7:
return 'seven';
case 8:
return 'eight';
case 9:
return 'nine';
case 10:
return 'ten';
case 11:
return 'eleven';
case 12:
return 'twelve';
case 13:
return 'thirteen';
case 14:
return 'forteen';
case 15:
return 'fifteen';
case 16:
return 'sixteen';
case 17:
return 'seventeen';
case 18:
return 'eighteen';
case 19:
return 'nineteen';
case 20:
return 'twenty';
case 30:
return 'thirty';
case 40:
return 'forty';
case 50:
return 'fifty';
case 60:
return 'sixty';
case 70:
return 'seventy';
case 80:
return 'eighty';
case 90:
return 'ninety';
default:
return '';
}
}
printProblem17Result() {
var words = new StringBuffer();
for(var number = 1; number <= 1000; number++) {
if(number < 100) {
if(isSpecialBelow100(number)) {
words.write(specialNumberToWord(number));
} else {
words.write(specialNumberToWord(removeExcess(number, 10)));
words.write(' ');
words.write(specialNumberToWord(getExcess(number, 10)));
}
} else if(number >= 100 && number < 1000) {
var remaining = int.parse(removeExcess(number, 100).toString().replaceAll('0', ''));
words.write(specialNumberToWord(remaining));
words.write(' hundred ');
var excess = getExcess(number, 100);
if(excess != 0) {
words.write(' and ');
if(isSpecialBelow100(excess)) {
words.write(specialNumberToWord(excess));
} else {
words.write(specialNumberToWord(removeExcess(excess, 10)));
words.write(' ');
words.write(specialNumberToWord(getExcess(excess, 10)));
}
}
} else {
words.write(' one thousand');
}
words.write(' ');
}
print(words.toString().split(' ').fold(0, (prev, current) => prev + current.length));
}
就我所知,也许不是最整齐的字符应该产生正确数量的字符。
似乎还不到10个解决方案。有人可以告诉我我做错了什么吗?
更新:
我没有添加拼写更正,但确实删除了换行符,并用空格替换了它,并更正了split方法以在空格处进行拆分。我最初发布的版本是通过非常恶劣的打印线方法进行调试的尝试。
确实,14的正确拼写是14,而不是14,这有时容易被忽略。
最佳答案
您有一个拼写错误,因为14应该是十四而不是“十四”。
您似乎也在用
print( (words.toString().replaceAll(' ','').replaceAll('\n','')).length);
更正此错误,您将获得答案21124。
关于dart - 解决方案不计算答案中的字母数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23340063/