例 one, two, three, four, five共有3 + 3 + 5 + 4 + 4 = 19个字母。
求英文 1 到1000 共有多少个字母。不考虑空格和连接符
求英文 1 到1000 共有多少个字母。不考虑空格和连接符
解决方案 »
- java获取本地时间
- java 对文件进行加密解密 出问题了
- 如何获取这个比较特殊的网页内容
- 一个类似聊天程序的问题
- java下有没有类似.net那种propertygrid属性框控件可用?
- 请高人指教java这个版本jdk-1_5_0_04-nb-4_1-win.exe的一个问题
- 请教:用Eclipse如何将J2EE、struts等Jar包引用到项目中
- 小妹请教HASH TREE
- 如何解释Collection plantes=new ArrayList(),我不太明白,请点拨!
- 刚开始学JAVA,想知道什么是J2EE,JSP,EJB,J2SE,JDBC的关,还有XML和java到底有什么关系
- 重写main方法的一个问题
- 用Math.round()或BigDecimal 保存两位小数 效率为什么会很低很低呢?
瀑布汗 这题主要是考英语呢
你先把1到1000的英文列出来呗
数字母还不好说
replace("[\\s\\u3000\\xA0\\t]+","");//去掉全部空格
replace(",","");//去掉逗号
然后.length()
不用全列出来,还是有规律的
1到20的全列出来,然后twenty,thirty,......,ninety,hundred,thousand,and
总结下规律,可以用循环搞定顺带再鄙视下出题目的老师
做个基本数词表,保存1-20,30,40,50,60,70,80,90的英文单词
String[] baseTable = {"zero", "one", "tow"...so on}; //数组最好为100,按位置分配
做个单位数次表,保存100,1000
String[] unitTable = {"hundred", "thousand"};
写个方法解析数字
String analyze(int num) {
int[] dig = new int[String.valueOf(num).length];
int idx = dig.length-1;
while (num > 0) {
dig[idx--] = num%10;
num /= 10;
}
StringBuilder buf = new StringBuilder();
switch (dig.length) {
case 1:
...
break;
case 2:
...
break;
case 3:
...
break;
case 4: //这里只大概写下4位数这里的思路,其他LZ自己写吧
buf.append(baseTable[dig[0]]).append(unitTable[1]).append("and");
if (dig[1] > 0) {buf.append(baseTable[dig[1]]).append(unitTable[0]).append("and");}
if (dig[2] > 0) {buf.append(baseTable[dig[2]]);}
if (dig[3] > 0) {buf.append(baseTable[dig[3]]);}
break;
default:
...
break;
}
return buf.toString();
}主程序
int sum = 0;
for (int i=1; i<=1000; i++) {
sum += analyze(i).length();
}
public static final String[] baseTable = {
"zero", "one", "tow", "three", "four", "five",
"six", "seven", "eight", "nine", "ten",
"eleven", "twelve", "thirteen", "fourteen", "fifteen",
"sixteen", "seventeen", "eighteen", "nineteen", "twenty",
"", "", "", "", "", "", "", "", "", "thirty",
"", "", "", "", "", "", "", "", "", "fourty",
"", "", "", "", "", "", "", "", "", "fifty",
"", "", "", "", "", "", "", "", "", "sixty",
"", "", "", "", "", "", "", "", "", "seventy",
"", "", "", "", "", "", "", "", "", "eighty",
"", "", "", "", "", "", "", "", "", "ninety"
};
public static final String[] unitTable = {"hundred", "thousand"};
public static void main(String[] args) {
int sum = 0;
for (int i=1; i<=1000; i++) {
String s = analyze(i);
System.out.println(s);
sum += s.length();
}
System.out.println(sum);
} public static String analyze(int num) {
if (num < 0) {return "";}
StringBuilder buf = new StringBuilder();
if (num < 20) {
return baseTable[num];
} else if (num < 100) {
if (num%10 == 0) {
buf.append(baseTable[num]);
} else {
buf.append(baseTable[num-num%10]);
buf.append(baseTable[num%10]);
}
} else if (num < 1000) {
buf.append(baseTable[num/100]).append(unitTable[0]);
if (num%100 != 0) {
buf.append("and");
buf.append(analyze(num%100));
}
} else if (num < 10000) {
buf.append(baseTable[num/1000]).append(unitTable[1]);
if (num%1000 != 0) {
buf.append("and");
buf.append(analyze(num%1000));
}
} return buf.toString();
}
}
上面说的都可以。如果嫌不好理解的话,也可以写多个for循环,把有规律的放一起,至于规律,自己列几行就能发现好几条规律的。