Java中的Euler#8项目在1000位数字中找到五个连续数字的最大乘积

Java中的Euler#8项目在1000位数字中找到五个连续数字的最大乘积,java,Java,如果我运行下面的程序,它将输出为40824,这是绝对正确的,也是预期的 public class EulerProblem8 { public static void main(String args[]) { String thousandNumbers = "73167176531330624919225119674426574742355349194934969835203127745063262395783180169848018694788518438586156078911

如果我运行下面的程序,它将输出为40824,这是绝对正确的,也是预期的

public class EulerProblem8 {

public static void main(String args[]) {
    String thousandNumbers = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";
    int limit = 5, count = 0, prod = 1, large = 0;
    for (int i = 0; i < thousandNumbers.length(); i++) {
        count++;
        if (count == limit) {
            count = 0; 
            if (prod > large) {
                large = prod;
            }
            prod = 1;
        }
          prod *= Integer.parseInt(thousandNumbers.charAt(i)+"");
    }
    System.out.println("Large no is :" + large);
 }
}
公共类EulerProblem8{
公共静态void main(字符串参数[]){
字符串千位数="7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";
整数极限=5,计数=0,产品=1,大数值=0;
对于(int i=0;i大型){
大=产品;
}
prod=1;
}
prod*=Integer.parseInt(千位数.charAt(i)+”);
}
System.out.println(“大编号为:“+Large”);
}
}
如果我按照下面给出的方式修改代码,会有不同的输出?31752为什么

public class EulerProblem8 {

public static void main(String args[]) {
    String thousandNumbers = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";
    int limit = 5, count = 0, prod = 1, large = 0;
    for (int i = 0; i < thousandNumbers.length(); i++) {
        count++;
        prod *= Integer.parseInt(thousandNumbers.charAt(i)+"");
         if (count == limit) {
            count = 0; 
            if (prod > large) {
                large = prod;
            }
            prod = 1;
        }
    }
    System.out.println("Large no is :" + large);
}
公共类EulerProblem8{
公共静态void main(字符串参数[]){
字符串千位数=”7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";
整数极限=5,计数=0,产品=1,大数值=0;
对于(int i=0;i大型){
大=产品;
}
prod=1;
}
}
System.out.println(“大编号为:“+Large”);
}

}您没有考虑每一个可能的5位数字,而是只考虑从第四位开始的每5位数字,在第一种情况下,在第二种情况下,从第四位开始。第二种情况下,字符串的切分方式不同,因此给出了不同的答案

注意:使用可以更快地将字符转换为十进制

prod *= thousandNumbers.charAt(i) - '0';

您希望什么是正确的输出?@skiwi 40824每行40824是预期的输出。事实上,第一个程序仅将前四位数字相乘得到第一个乘积。因此,它正在计算数字0-3的乘积(错误),4-8,9-13,14-18…,而第二个程序正在计算0-4,5-9,10-14,15-19的乘积,……两个程序都不正确。第一个程序给出的正确答案纯粹是巧合。@ajb谢谢你的更正,我的理解是错误的。@ajb是的,我同意你的观点。但我怀疑的是,为什么第二个程序的计算结果会像0-4,5一样失败-9?问题是:在1000位数字中找出五个连续数字的最大乘积number@user1295079你应该检查0-4、1-5、2-6等等。如果你只检查0-4、5-9、10-14等,你将错过80%的产品。如果你只检查4-8、9-13、14-18等,就像在第一个程序中一样,你也将错过80%的产品。继续这样做的唯一原因是你很幸运,答案是你没有错过的20%。@ajb我明白了,你告诉我检查0-4,1-5而不是0-4,5-9,对吗?