求1000位数字中连续五位数字最大乘积的代码

发布于 2024-12-09 00:14:42 字数 2846 浏览 0 评论 0原文

我正在做一个项目欧拉问题,如下所示:

Find the greatest product of five consecutive digits in the 1000-digit number.

73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450

任何人都可以给我一些提示,说明为什么我下面的代码不正确吗?我的代码当前输出的答案为 570394440,这个答案非常高。有人可以给我一些提示吗?我已经盯着它看了好几个小时了。

public class Euler3 {

    public static void main(String[] args){
          BigInteger bigInteger1 = new BigInteger ("7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450");
          int product=0;
          int product2=0;
          String values = bigInteger1.toString();
          for(int i = 0; i<values.length()-4; i++){
              product2 = ((((values.charAt(i) * values.charAt(i+1)) * values.charAt(i+2)) * values.charAt(i+3))* values.charAt(i+4));
              if(product2 > product){
                  product=product2;
              }
          }
          System.out.println(product);        
    }
}

I am doing a project euler question as follows :

Find the greatest product of five consecutive digits in the 1000-digit number.

73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450

Can anyone give me some tips for why my code below is incorrect please? My code currently outputs an answer of 570394440, which is wildly high. Can anyone give me some hints please? I have been staring at it for hours.

public class Euler3 {

    public static void main(String[] args){
          BigInteger bigInteger1 = new BigInteger ("7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450");
          int product=0;
          int product2=0;
          String values = bigInteger1.toString();
          for(int i = 0; i<values.length()-4; i++){
              product2 = ((((values.charAt(i) * values.charAt(i+1)) * values.charAt(i+2)) * values.charAt(i+3))* values.charAt(i+4));
              if(product2 > product){
                  product=product2;
              }
          }
          System.out.println(product);        
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

离鸿 2024-12-16 00:14:42

charAt() 报告“0”为 48,“1”为 49,等等,因为它是字符值。

每个减去 48,然后重试。

charAt() reports 48 for '0' and 49 for '1' etc. as it is the character values.

Subtract 48 from each and try again.

傾旎 2024-12-16 00:14:42

您正在获取字符代码值,这就是数字如此高的原因。

顺便说一句,无需将其存储为 BigInteger,只需使用字符串:-)

You are getting the character code values, that's why the number is so high.

No need to store it as a BigInteger by the way, just use a string :-)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文