项目欧拉17未知问题

时间:2013-12-08 00:54:35

标签: java

我刚刚完成Project Euler(17)的编码,发现我的代码不正确。我找不到代码无法正常工作的地方。输出一个数字,但在检查答案是什么之后,它太高了。我找不到我搞砸了代码的地方。我很感激帮助。

public class Euler17
{
    public static void main(String[] args)
{
    int total = 0;

    for(int i = 1; i <= 1000; i++ )
    {

        total += letters(i);
        System.out.println(i + " " + letters(i));
    }
    System.out.print(total);
}

public static int letters(int i)
{

    if(i >= 1 && i <= 99)
    {
        return tens(i);
    }

    if(i % 100 == 0 && i != 1000)
    {
        return (tens(i / 100) + 7);
    }

    if(i != 1000)
    {
        return hundreds(i);
    }

    if(i == 1000)
    {
        return 11;
    }
    else
    {
        return - 1;
    }

}
public static int hundreds(int i)
{
    int h;
    int t;
    t = i % 100;
    h = (i - t) / 100;
    return ones(h) + 10 + tens(t);
}
public static int tens(int i)
{
    // int t = 0;
    int o;
    o = i % 10;
    // t = (i - o) / 10;
    // find value of i and split into tens and ones
    switch(i)
    {
        case 1:
            return 3;
        case 2:
            return 3;
        case 3:
            return 5;
        case 4:
            return 4;
        case 5:
            return 4;
        case 6:
            return 3;
        case 7:
            return 5;
        case 8:
            return 5;
        case 9:
            return 4;
        case 10:
            return 3;
        case 11:
            return 6;
        case 12:
            return 6;
        case 13:
            return 8;
        case 14:
            return 8;
        case 15:
            return 7;
        case 16:
            return 7;
        case 17:
            return 9;
        case 18:
            return 8;
        case 19:
            return 8;

    }
    if(i >= 20 && i <= 29)
    {
        return 6 + ones(o);
    }
    if(i >= 30 && i <= 39)
    {
        return 6 + ones(o);
    }
    if(i >= 40 && i <= 49)
    {
        return 6 + ones(o);
    }
    if(i >= 50 && i <= 59)
    {
        return 5 + ones(o);
    }
    if(i >= 60 && i <= 69)
    {
        return 5 + ones(o);
    }
    if(i >= 70 && i <= 79)
    {
        return 7 + ones(o);
    }
    if(i >= 80 && i <= 89)
    {
        return 6 + ones(o);
    }
    if(i >= 90 && i <= 99)
    {
        return 6 + ones(o);
    }

    return i;
}
public static int ones(int i)
{

    switch(i)
    {
        case 1:
            return 3;
        case 2:
            return 3;
        case 3:
            return 5;
        case 4:
            return 4;
        case 5:
            return 4;
        case 6:
            return 3;
        case 7:
            return 5;
        case 8:
            return 5;
        case 9:
            return 4;
        case 0:
            return 0;
    }
    return i;
}
}

1 个答案:

答案 0 :(得分:1)

 if(i >= 40 && i <= 49)
{
    return 6 + ones(o);
}

它拼写四十,而不是十四。在这里使用5而不是6。