我想计算从1到100的单词中的字母数,例如....
如果数字1到5用文字写出:一,二,三,四,五,
然后总共使用3 + 3 + 5 + 4 + 4 = 19个字母。
我已经写了以下代码......
public static int helper(int a){
String ones[]= {"","one","two","three","four","five","six","seven","eight","nine","ten",
"eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen"
,"eighteen","nineteen"};
String tens[]= {"","","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
if(a<20){
return ones[a].length();
}
else
return tens[a/10].length();
}
public static int countLetters(int a){
if(a==100)
return 10;
else if(a<20){
return helper(a);
}
else{
return helper((a/10)*10)+ helper(a%10);
}
}
主要功能如
public static void main(String[] args) {
// TODO Auto-generated method stub
int result=0;
for(int i=1;i<=100;i++){
result+=countLetters(i);
}
System.out.println(result);
}
此问题的正确答案是864
。在String ones[]
数组中,我使用了标点符号" "
,它们之间有空格。返回的result
为872
这是不正确的,但在删除它们之间的空格后,返回的答案为864
。我没有空间使用""
。我想知道为什么会这样......?
对于这个问题,字符串或字符串数组是否有任何逻辑方面?
答案 0 :(得分:2)
只有在" "
数组中有ones
时才会发生。
如果您有20,则"twenty"
的长度+ helper(a%10)
的长度为helper(0)
,其长度为" "
。因此,您获得"twenty"
的长度+ " "
的长度。
这发生在20,30,40,50,60,70,80和90.8次。这就是你看到872的原因。
最简单的解决方法就是像你一样制作第一个字符串""
,但这也可行:
// return helper((a/10)*10)+ helper(a%10);
return helper((a/10)*10) + (a%10 == 0 ? 0 : helper(a%10));
答案 1 :(得分:1)
String中的空格也会增加String的长度,例如:
"foo bar".length() --> 7
" foo bar ".length() -->9
"foobar".length() -->6
如果您想避免出现此问题并删除外部空间请使用修剪。
"foo bar".trim().length() --> 7
" foo bar ".trim().length() -->7
"foobar".trim().length() -->6
希望这会有所帮助。
答案 2 :(得分:0)
当a
的值为20时,这行代码会计算什么?
return helper((a / 10) * 10) + helper(a % 10);
您的答案是计算此计算。所以,让我们解决这个问题。
return helper((20 / 10) * 10) + helper(20 % 10);
变为:
return helper(20) + helper(0);
并且在对helper(0)
的调用中,您的方法执行以下特定条件:
if(a<20){
return ones[a].length();
}
因此,尽管从1开始循环迭代并不意味着数组ones
的索引0没有被遍历。