C#
#include <stdio.h>
int total(int i);
int main(){
int sum = 0;
for (int i = 1; i <= 1000; ++i)
{
sum += total(i);
}
printf("%d\n",sum);
return 0;
}
int total(int i){
//'one','two','three','four','five','six','seven','eight','nine','ten','eleven',
//'twelve','thirteen','fourteen','fifteen','sixteen','seventeen','eighteen','nineteen'
int arr[20] = {0,3,3,5,4,4,3,5,5,4,3,6,6,8,8,7,7,9,8,8};
//'twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety'
int arr1[10] = {0,0,6,6,5,5,5,7,6,6};
int temp = 0;
if(i < 20){
return arr[i];
}
else if(i < 100){
return arr1[i / 10] + arr[i % 10];
//34 = arr1[3] + arr[4] = 6 + 3 = 'thirty-four'
}
else if(i < 1000){
temp = total(i % 100);//递归
if(temp != 0) temp += 3;
return (temp + arr[i / 100] + 7);
/*
i = 342 (three hundred and forty-two)
temp = total(42) = arr1[4] + arr[2] = 5 + 3 = 8
temp = 8 + 3 = 11
sum = 11 + 5 + 7 = 23
*/
}
else if(i == 1000){
return 11;
}
return 0;
}
JAVA
package exercise;
public class _表达数字的英文字母计数 {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 1000; ++i)
{
sum += total(i);
}
System.out.println(sum);
}
private static int total(int i) {
int[] arr = {0,3,3,5,4,4,3,5,5,4,3,6,6,8,8,7,7,9,8,8};
int[] arr1 = {0,0,6,6,5,5,5,7,6,6};
int temp = 0;
if(i < 20){
return arr[i];
}
else if(i < 100){
return arr1[i / 10] + arr[i % 10];
}
else if(i < 1000){
temp = total(i % 100);//递归
if(temp != 0) temp += 3;
return (temp + arr[i / 100] + 7);
}
else if(i == 1000){
return 11;
}
return 0;
}
}
结果:21124