Java Euler 17项目(爪哇)
我在欧拉计划工作。根据下面的代码,我得到的答案是21088,这是错误的。我想不出问题出在哪里。有人知道我哪里出错了吗?谢谢Java Euler 17项目(爪哇),java,Java,我在欧拉计划工作。根据下面的代码,我得到的答案是21088,这是错误的。我想不出问题出在哪里。有人知道我哪里出错了吗?谢谢 public class Problem17 { public static void main(String[] args) { System.out.println(countLetters(1000)); } public static long countLetters(int n) { long sum
public class Problem17 {
public static void main(String[] args) {
System.out.println(countLetters(1000));
}
public static long countLetters(int n) {
long sum = 0;
for (int i=1; i<=n; i++){
sum += getLetters(i);
}
return sum;
}
public static int getLetters(int n) {
int letters = 0;
switch (n) {
case 0: letters = 0; break;
case 1: letters = "One".length(); break;
case 2: letters = "Two".length(); break;
case 3: letters = "Three".length(); break;
case 4: letters = "Four".length(); break;
case 5: letters = "Five".length(); break;
case 6: letters = "Six".length(); break;
case 7: letters = "Seven".length(); break;
case 8: letters = "Eight".length(); break;
case 9: letters = "Nine".length(); break;
case 10: letters = "Ten".length(); break;
case 11: letters = "Eleven".length(); break;
case 12: letters = "Twelve".length(); break;
case 13: letters = "Thirteen".length(); break;
case 14: letters = "Fourteen".length(); break;
case 15: letters = "Fifteen".length(); break;
case 16: letters = "Sixteen".length(); break;
case 17: letters = "Seventeen".length(); break;
case 18: letters = "Eighteen".length(); break;
case 19: letters = "Nineteen".length(); break;
case 20: letters = "Twenty".length(); break;
case 30: letters = "Thirty".length(); break;
case 40: letters = "Forty".length(); break;
case 50: letters = "Fifty".length(); break;
case 60: letters = "Sixty".length(); break;
case 70: letters = "Seventy".length(); break;
case 80: letters = "Eighty".length(); break;
case 90: letters = "Ninety".length(); break;
case 100: letters = "OneHundred".length(); break;
case 200: letters = "TwoHundred".length(); break;
case 300: letters = "ThreeHundred".length(); break;
case 400: letters = "FourHundred".length(); break;
case 500: letters = "FiveHundred".length(); break;
case 600: letters = "SixHundred".length(); break;
case 700: letters = "SevenHundred".length(); break;
case 800: letters = "EightHundred".length(); break;
case 900: letters = "NineHundred".length(); break;
case 1000: letters = "OneThousand".length(); break;
}
if (letters == 0){
int length = (int)(Math.log10(n)+1); //how many digits does the number have?
int splitNumber;
for (int i=1;i<=length;i++){
if (i == 3) letters += 3; //add "and" to the total letters if necessary
splitNumber = (int) (n % Math.pow(10, i));
letters += getLetters(splitNumber);
n -= splitNumber;
}
}
return letters;
}
}
公共类问题17{
公共静态void main(字符串[]args){
系统输出打印LN(计数字母(1000));
}
公共静态长计数字母(整数n){
长和=0;
对于(int i=1;i您的问题是,如果您没有从案例列表中获得匹配项,那么您总是将数字拆分为单独的数字,从较低的数字开始。因此,对于114,您取四个,剩下110个,然后取10个,剩下100个。如果您以相反的方式进行,那么对于114,您删除最高部分(100个),然后您还有14个开关可用
顺便说一句,这个问题非常对称,用笔和纸可能只需要几分钟。当你拿到它并访问论坛17年后,我建议你看看bartmeijer的Java帖子。有一些非常酷的快捷方式,甚至可以让你手工完成(可能需要一个简单的计算器辅助)。当你解决问题时,一定要看论坛,这样你就能看到其他人是如何解决问题的,并从中学习。+1解决欧拉项目问题:)是的,解决欧拉项目问题非常好。我花了大约2个小时才找到这个问题的正确答案,除了规则和“和”之外,这有点棘手继续尝试,你会得到正确的答案,相信我。PS:我还建议保留所有问题的源代码,许多函数和算法可用于其他问题…你的程序的输出非常接近正确答案:)(差异最多为1%).我继续,像这样翻动了劈叉,算出来了,谢谢。